0


如何使用JDBC操作数据库,JDBC实战案例详细解读

1. 前言

前面 3 篇 JDBC 入门级基础文章中,我们已经探讨了什么是 JDBC,如何使用JDBC 操作数据库,JDBC API 详细解读,以及数据库连接池的基础等。文章带来的反馈还不错,今天我们使用前面学习的内容做一个实战案例训练。

  • JDBC快速入门,如何使用JDBC操作数据库?
  • 什么是数据库连接池?Druid(德鲁伊)连接池的使用详细解读
  • 什么是数据库连接池?Druid(德鲁伊)连接池的使用详细解读

image-20230124125442886

今天是初三,我们继续努力!都朝春天去,别烂在过去和梦里,要肆意妄为,要志得意满!!

前面我们说过,在 Java 代码中,执行 sql 查询语句以后返回一个 ResultSet 类的对象,并且 ResultSet 类提供了方法让我们可以操作查询结果数据,例如可以直接打印所有查询的数据。

示例:

publicclassJDBCDemo{publicstaticvoidmain(String[] args)throwsException{//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2. 获取连接String url="jdbc:mysql://localhost:3306/blog?useSSL=false";String username="root";String ppassword="abc123";//密码Connection conn =DriverManager.getConnection(url,username,password);//3. 定义sqlString sql="select * from student";//4. 获取sql执行对象Statement stmt = conn.createStatement();//5. 执行sqlResultSet rs = stmt.executeQuery(sql);//6. 处理结果while(rs.next()){int id=rs.getInt(1);String name=rs.getString(2);String gender=rs.getString(3);System.out.println(id);System.out.println(name);System.out.println(gender);System.out.println("---------");}//7. 释放资源
        rs.close();
        stmt.close();
        conn.close();}}

运行结果:

image-20230124144624978

显然这样并不是我们想要的效果,数据零散不好处理。所以我们可以把每条数据封装为一个实体类的对象,每个对象对应数据库表的一条记录,并且把每个对象放到集合中存储。练习使用的数据库表:

droptableifexists student;createtable student(
    id intprimarykeyauto_increment,
    name varchar(10),
    gender char(1));insertinto student(name,gender)values('张三','男'),('李四','女'),('王五','男');

在 Navicat 中查看数据表:

image-20230124162412597

2. 实战案例

查询学生信息表数据,封装为 Student 类对象,并存放在 ArrayList 集合中。

思路:要解决这个问题,大概分为以下几个步骤:

  • 创建一个 Student 实体类
  • 查询数据库中的数据,并且赋值给对象的属性
  • 将对象存储到 ArrayList 集合中

第一步:创建一个Student 实体类,并定义 set() 方法,重写 Object 类中的 toString 方法,方便查看打印效果。

publicclassStudent{privateint id;privateString name;privateString gender;publicintgetId(){return id;}publicvoidsetId(int id){this.id = id;}publicvoidsetName(String name){this.name = name;}publicvoidsetGender(String gender){this.gender = gender;}@OverridepublicStringtoString(){return"Student{"+"id="+ id +", name='"+ name +'\''+", gender='"+ gender +'\''+'}';}}

小tips :在 idea 中使用 Alt + Inset 快捷键可以快速给类添加或重写一些方法,例如 get() ,set() ,toString() 方法等。使用 Ctrl + 鼠标左键可以快速选择多项方法。

第二步:使用 Java 代码操作数据库,查询数据库表中所有学生信息并通过 set() 方法赋值给 Student 类的对象,将对象存储到集合中。

publicclassJDBCDemo{publicstaticvoidmain(String[] args)throwsException{//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2. 获取连接String url ="jdbc:mysql://localhost:3306/blog?useSSL=false";String username ="root";String ppassword ="abc123";//密码Connection conn =DriverManager.getConnection(url, username, password);//3. 定义sqlString sql ="select * from student";//4. 获取sql执行对象Statement stmt = conn.createStatement();//5. 执行sqlResultSet rs = stmt.executeQuery(sql);//6. 处理结果List<Student> students =newArrayList<>();while(rs.next()){Student s =newStudent();int id = rs.getInt(1);String name = rs.getString(2);String gender = rs.getString(3);

            s.setId(id);
            s.setName(name);
            s.setGender(gender);

            students.add(s);}System.out.println(students);//7. 释放资源
        rs.close();
        stmt.close();
        conn.close();}}

运行结果:

image-20230124151820540

这样,我们的程序就达到了预期的效果,将来需要使用的数据全部封装为对象并存放在了集合中。

3. 增删改查操作练习

在数据库连接池入门篇中,我们学习了 Druid 连接池的使用,数据库连接池允许重复使用一个现有的数据库连接对象,提升了系统的响应速度和时间。下面我们使用数据库连接池来练习解决上面的问题,并且在获取 sql 执行对象时,我们使用 PreparedStatement 类,解决sql 注入的问题。

3.1 查询所有

查询所有数据,并把查询结果数据封装为对象存储在集合中,这里的数据表,Student 实体类和上面例子中相同。

publicclassDruidDemo{publicstaticvoidmain(String[] args)throwsException{//加载配置文件Properties prop =newProperties();
        prop.load(newFileInputStream("jdbc-demo/src/druid.properties"));//获取数据库连接池对象DataSource dataSource =DruidDataSourceFactory.createDataSource(prop);//获取数据库连接对象Connection conn = dataSource.getConnection();//定义sqlString sql ="select * from student";//获取 sql 执行对象PreparedStatement pstmt = conn.prepareStatement(sql);//执行 sqlResultSet rs = pstmt.executeQuery();//处理数据,将查询结果数据封装为对象存储在集合中List<Student> students =newArrayList<>();while(rs.next()){Student s =newStudent();int id = rs.getInt(1);String name = rs.getString(2);String gender = rs.getString(3);

            s.setId(id);
            s.setName(name);
            s.setGender(gender);

            students.add(s);}System.out.println(students);//释放资源
        rs.close();
        pstmt.close();
        conn.close();}}

3.2 添加数据

现在演示往数据库中添加一条记录,应用场景为用户在客户端输入一条数据时,我们需要将数据添加到数据库。示例:

publicclassDruidDemo{publicstaticvoidmain(String[] args)throwsException{//接收到用户的数据int id=4;String name="小美";String gender="女";//加载配置文件Properties prop =newProperties();
        prop.load(newFileInputStream("jdbc-demo/src/druid.properties"));//获取数据库连接池对象DataSource dataSource =DruidDataSourceFactory.createDataSource(prop);//获取数据库连接对象Connection conn = dataSource.getConnection();//定义sqlString sql ="insert into student values(?,?,?)";//获取 sql 执行对象PreparedStatement pstmt = conn.prepareStatement(sql);//设置参数
        pstmt.setInt(1,id);
        pstmt.setString(2,name);
        pstmt.setString(3,gender);//执行 sqlint count = pstmt.executeUpdate();//返回受影响的行数//处理数据if(count>0){System.out.println("添加成功");}else{System.out.println("添加失败");}//释放资源
        pstmt.close();
        conn.close();}}

image-20230124161437384

此时的数据表:

image-20230124162502370

3.3 修改数据

现在数据表中的数据,应用场景为用户在客户端修改数据,对应数据库中的数据也要完成修改。示例:

publicclassDruidDemo{publicstaticvoidmain(String[] args)throwsException{//接收到用户的数据int id=1;String name="小王";String gender="女";//加载配置文件Properties prop =newProperties();
        prop.load(newFileInputStream("jdbc-demo/src/druid.properties"));//获取数据库连接池对象DataSource dataSource =DruidDataSourceFactory.createDataSource(prop);//获取数据库连接对象Connection conn = dataSource.getConnection();//定义sqlString sql ="update student set name=?,gender=? where id=?";//获取 sql 执行对象PreparedStatement pstmt = conn.prepareStatement(sql);//设置参数
        pstmt.setString(1,name);
        pstmt.setString(2,gender);
        pstmt.setInt(3,id);//执行 sqlint count = pstmt.executeUpdate();//返回受影响的行数//处理数据if(count>0){System.out.println("修改成功");}else{System.out.println("修改失败");}//释放资源
        pstmt.close();
        conn.close();}}

image-20230124161542027

此时的数据表:

image-20230124162612729

3.4 删除数据

下面演示删除数据,用户在客户端选择删除某条数据记录时,数据库中的数据也要完成删除操作。示例:

publicclassDruidDemo{publicstaticvoidmain(String[] args)throwsException{//接收到用户的数据int id=4;//加载配置文件Properties prop =newProperties();
        prop.load(newFileInputStream("jdbc-demo/src/druid.properties"));//获取数据库连接池对象DataSource dataSource =DruidDataSourceFactory.createDataSource(prop);//获取数据库连接对象Connection conn = dataSource.getConnection();//定义sqlString sql ="delete from student where id=?";//获取 sql 执行对象PreparedStatement pstmt = conn.prepareStatement(sql);//设置参数
        pstmt.setInt(1,id);//执行 sqlint count = pstmt.executeUpdate();//返回受影响的行数//处理数据if(count>0){System.out.println("删除成功");}else{System.out.println("删除失败");}//释放资源
        pstmt.close();
        conn.close();}}

image-20230124161944039

此时的数据表:

image-20230124162647734

4. 总结

本文是 JDBC 基础教程的练习篇,学会使用 Java 代码操作数据库,完成数据库,数据表,表中数据的增删改查操作。

大家新年好,下期见。


🔖Java编程基础教程系列

Java编程进阶之路(从入门到精通) 👉 点击订阅👈


本文转载自: https://blog.csdn.net/zhangxia_/article/details/128756932
版权归原作者 橙 子_ 所有, 如有侵权,请联系我们删除。

“如何使用JDBC操作数据库,JDBC实战案例详细解读”的评论:

还没有评论