目录
十二、Web→WEB-INF→index.jsp后缀改为.html
一、前提
我用的软件版本:
我的idea版本为:IntelliJ IDEA 2021.1.2 x64
我的apache-tomcat版本为:apache-tomcat-9.0.68
我的apache-tomcat存放路径为:D:\programfiles\apache-tomcat-9.0.68
准备工作:
在本案例之前,我已经安装好了apache-tomcat,并在idea中打开本地html文件,验证是连接成功的。(关于安装apache-tomcat,并在idea中运行,打开本地html文件的案例,在上一篇有具体说明,在这里不赘述)
二、创建一个普通的java项目
File→New Project→命名为myWeb→点击下一步→完成
三、添加Web Application
在项目上,鼠标右键Add Framework Suppot
2、勾选Web Application(4.0),勾选Creat web.xml,点击OK
3、添加完成后,在项目路径下自动生成web文件夹
四、添加tomcat
点击右上方Add Configuration→点击+号→选择Tomcalt Server下的local
点击右下角Fix
3、点击Deployment,把下方的Application context命名的后面的单词删掉,保留和项目名一致,我的项目名为myWeb;
五、测试tomcat是否连接成功
在项目目录下,找到index.jsp,在body标签内添加内容hello,点击右上角绿色三角运行
服务器启动成功,网页自动弹出,效果如下:
六、在src目录下创建四个package
在src目录下创建四个package,命名如下:(com后面的qingruan为公司名);
之所以要建四个package,是为了分工,不用所有代码凑在一起。
com.qingruan.dao:存放方法类StudentDao.java
com.qingruan.entity:存放实体类Student.java
com.qingruan.test:存放测试类TestDb.java
com.qingruan.util:存放连接数据库的类DbUtils.java
七、在WEB-INF下创建文件夹lib,导入两个jar包
把以下两个包粘贴到lib;(可上网搜)
2、鼠标右键Add as Library,点击确定,把两个包添加到路径下;
八、把druid.properties粘贴在src目录下
文件druid.properties存放的是数据库的名称、账号和密码。
关于java和MySQL版本和工具,以及相关设置的详细介绍在上一篇,这里不再赘述。
八、实体类、方法类、测试类、连接类(代码部分)
方法类StudentDao.java:
package com.qingruan.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.qingruan.entity.Student;import com.qingruan.util.DbUtils;// dao 负责与数据库交互的,目前实现的技术是jdbcpublic class StudentDao { private static PreparedStatement ps = null; private static Connection cn = null; private static ResultSet rs =null; public int saveStu(Student stu) { // 传入一个学生对象 // 1.获得连接 try { cn = DbUtils.getConnection(); // 2.获得预处理对象 String sql = "insert into student values(null,?,?,?,?,?,?)"; ps = cn.prepareStatement(sql); // 3.赋予实际的参数 ps.setString(1, stu.getStu_number()); ps.setString(2, stu.getStu_name()); ps.setInt(3, stu.getStu_age()); ps.setString(4, stu.getStu_sex()); ps.setInt(5, stu.getStu_score()); ps.setString(6, stu.getStu_hiredate()); // 4.得到结果集 return ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ DbUtils.close(null, ps, cn);// 5.释放资源 } return 0; } public int updateStu(Student stu){ try { cn = DbUtils.getConnection(); String sql="update student set stu_number=?,stu_name=?,stu_age=?,stu_sex=?,stu_score=?,stu_hiredate=? where stu_id=?"; ps=cn.prepareStatement(sql); ps.setString(1, stu.getStu_number()); ps.setString(2, stu.getStu_name()); ps.setInt(3, stu.getStu_age()); ps.setString(4, stu.getStu_sex()); ps.setInt(5, stu.getStu_score()); ps.setString(6, stu.getStu_hiredate()); ps.setInt(7, stu.getStu_id()); return ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ DbUtils.close(null, ps, cn); } return 0; } public int delStu(int stuId){ try { cn = DbUtils.getConnection(); String sql="delete from student where stu_id=?"; ps=cn.prepareStatement(sql); ps.setInt(1, stuId); return ps.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ DbUtils.close(null, ps, cn); } return 0; } public Student queryByStuId(int stuId){ Student stu =null; try { cn = DbUtils.getConnection(); String sql="select * from student where stu_id=?"; ps=cn.prepareStatement(sql); ps.setInt(1, stuId); rs = ps.executeQuery(); if(rs.next()){ return stu =new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getInt(6), rs.getString("stu_hiredate")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DbUtils.close(rs, ps, cn); } return stu; } public List
queryFindAll(){ List list =new ArrayList (); try { cn = DbUtils.getConnection(); String sql="select * from student"; ps=cn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ list.add(new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5), rs.getInt(6), rs.getString("stu_hiredate")));//放到集合中 } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { DbUtils.close(rs, ps, cn); } return list; }}
测试类TestDb.java
package com.qingruan.test;import java.util.List;import org.junit.Test;import com.qingruan.dao.StudentDao;import com.qingruan.entity.Student;import com.qingruan.util.DbUtils;public class TestStuDao { StudentDao dao =new StudentDao(); //保存学生信息 @Test public void save(){ int result = dao.saveStu(new Student("1013", "Lulu", 22, "女", 95, "2020-9-1")); System.out.println(result>0?"添加成功":"添加失败"); } //修改 @Test public void update(){ Student stu = dao.queryByStuId(4); stu.setStu_name("Mimi"); int result = dao.updateStu(stu); System.out.println(result>0?"修改成功":"修改失败"); } //删除 @Test public void delete(){ int result = dao.delStu(1); System.out.println(result>0?"删除成功":"删除失败"); } //单个查询 @Test public void findById(){ Student stu = dao.queryByStuId(3); System.out.println(stu); } //查询所有 @Test public void findAll(){ List
list = dao.queryFindAll(); for(Student stu : list){ System.out.println(stu); } }}
如果@Test是红色异常的,要选中,右键Download Library fom Maven Repository,即可;
连接数据库的类DbUtils.java
package com.qingruan.util;import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;// 针对数据库的连接作用public class DbUtils { //定义私有成员 private static DataSource ds; //1.静态代码块 加载配置文件,初始化连接池对象 static{ // 特点:用于给类进行初始化,只加载一次,随着类的加载而加载 try { Properties pro =new Properties(); //加载属性文件 pro.load(DbUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //获得连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //2.定义一个方法:获取连接对象 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //3.定义一个方法:用于释放资源 public static void close(ResultSet rs,PreparedStatement ps,Connection cn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(cn!=null){ try { cn.close(); // 此时的关闭,是归还给连接池对象 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static DataSource getDataSource(){ return ds; }}
实体类Student.java
package com.qingruan.entity;// 学生类 与 数据库中的student学生表是与之对应的// 将数据库的学生表 看作是 java中的一个学生类 数据库中学生表的字段可以看作是 java中学生类的属性public class Student { private Integer stu_id; //学生编号(给程序使用) private String stu_number; //学号 private String stu_name; // 姓名 private Integer stu_age; // 年龄 private String stu_sex; // 性别 private Integer stu_score;//成绩 private String stu_hiredate; // 入学时间 public Student() { // TODO Auto-generated constructor stub } public Student(String stu_number, String stu_name, Integer stu_age, String stu_sex, Integer stu_score, String stu_hiredate) { this.stu_number = stu_number; this.stu_name = stu_name; this.stu_age = stu_age; this.stu_sex = stu_sex; this.stu_score = stu_score; this.stu_hiredate = stu_hiredate; } public Student(Integer stu_id, String stu_number, String stu_name, Integer stu_age, String stu_sex, Integer stu_score, String stu_hiredate) { this.stu_id = stu_id; this.stu_number = stu_number; this.stu_name = stu_name; this.stu_age = stu_age; this.stu_sex = stu_sex; this.stu_score = stu_score; this.stu_hiredate = stu_hiredate; } @Override public String toString() { return "Student [stu_id=" + stu_id + ", stu_number=" + stu_number + ", stu_name=" + stu_name + ", stu_age=" + stu_age + ", stu_sex=" + stu_sex + ", stu_score=" + stu_score + ", stu_hiredate=" + stu_hiredate + "]"; } public Integer getStu_id() { return stu_id; } public void setStu_id(Integer stu_id) { this.stu_id = stu_id; } public String getStu_number() { return stu_number; } public void setStu_number(String stu_number) { this.stu_number = stu_number; } public String getStu_name() { return stu_name; } public void setStu_name(String stu_name) { this.stu_name = stu_name; } public Integer getStu_age() { return stu_age; } public void setStu_age(Integer stu_age) { this.stu_age = stu_age; } public String getStu_sex() { return stu_sex; } public void setStu_sex(String stu_sex) { this.stu_sex = stu_sex; } public Integer getStu_score() { return stu_score; } public void setStu_score(Integer stu_score) { this.stu_score = stu_score; } public String getStu_hiredate() { return stu_hiredate; } public void setStu_hiredate(String stu_hiredate) { this.stu_hiredate = stu_hiredate; }}
九、测试是否成功连接MySQL数据库
前提:
我的MySQL账号为:root;密码为:1234;
我建的数据库命名为:mydata1
测试java是否成功连接数据库:
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class TestConnectMysql { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydata1?characterEncoding=utf-8","root","1234"); System.out.println(cn); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } }}
连接成功,控制台输出效果如下:
十、数据库Student表的相关设置
包含以下属性
stu_id 学生id,不进行指定,由系统自增
stu_number 学号
stu_name 学生姓名
stu_age 学生年龄
stu_sex 学生性别
stu_score 学生成绩
stu_hiredate 日期类型-学生入学年份
在数据库mydata1下,新建表student,我的设置如下:
我插入了几条数据,如下:
十一、在web目录下,创建html、css、js文件夹
十二、Web→WEB-INF→index.jsp后缀改为.html
内容为:
右上角要选择为Tomcat,再点击绿色三角形,运行;
运行效果:
javaWeb项目下的.html文件,用tomcat在本地服务器上运行;
运行以后,要手动关闭,点击idea界面右上角红色正方形;
十三、验证JavaWeb项目下,能否对数据库表进行增删改查
目前还没有把增删改查的页面放在.html网页上,暂时在控制台输出,能正常输出,就代表代码是没有问题的,到后期再把对MySQL表增删改查的功能界面化,显示在网页上。
总之,我们做了这么多,就是为了让tomcat【服务器】+mysql【数据库】+java【增删改查方法】连起来。
运行第七步的TestStuDao.java代码,查看运行结果(因为该测试类包含了增删改查几个方法,所以要一个一个分开运行。选中方法名,右键运行;或者点击方法名左边的绿色三角,运行代码)
增加学生信息,效果如下:
查询所有学生的信息,效果如下:
根据id查询,一个学生的信息,效果如下:
删除学生信息,效果如下:
5、修改学生信息,效果如下:
十四、总结
在本期案例中,我们在idea创建了JavaWeb项目,还完成了apache-tomcat的相关配置,并且验证了用tomcat服务器打开本项目下的.html文件;然后,我们在MySQL新建了一个student表,并能在java方法中,顺利进行增删改查的操作。
因为不熟悉在idea创建JavaWeb项目,所以操作起来会比较手生,多尝试就好了。
还有就是在连接数据库时,idea要额外导入一些jar包,还有要注意粘贴在哪个路径下,不要弄错,这个真的非常讲究。
还是那句话:我们做了这么多,就是为了让tomcat【服务器】+mysql【数据库】+java【增删改查方法】连起来。
关于下一篇,我们会在idea创建一个JavaWeb项目,功能为用户可以在tomcat服务器上打开网页,在网页页面上,点击按钮或输入修改后的学生的信息,完成对数据库表的增删改查操作。
来源地址:https://blog.csdn.net/xjj1128/article/details/127361651