如何使用JDBC操作数据库,JDBC实战案例详细解读
Posted 橙 子_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JDBC操作数据库,JDBC实战案例详细解读相关的知识,希望对你有一定的参考价值。
1. 前言
前面 3 篇 JDBC 入门级基础文章中,我们已经探讨了什么是 JDBC,如何使用JDBC 操作数据库,JDBC API 详细解读,以及数据库连接池的基础等。文章带来的反馈还不错,今天我们使用前面学习的内容做一个实战案例训练。
今天是初三,我们继续努力!都朝春天去,别烂在过去和梦里,要肆意妄为,要志得意满!!
前面我们说过,在 Java 代码中,执行 sql 查询语句以后返回一个 ResultSet 类的对象,并且 ResultSet 类提供了方法让我们可以操作查询结果数据,例如可以直接打印所有查询的数据。
示例:
public class JDBCDemo
public static void main(String[] args) throws Exception
//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. 定义sql
String sql="select * from student";
//4. 获取sql执行对象
Statement stmt = conn.createStatement();
//5. 执行sql
ResultSet 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();
运行结果:
显然这样并不是我们想要的效果,数据零散不好处理。所以我们可以把每条数据封装为一个实体类的对象,每个对象对应数据库表的一条记录,并且把每个对象放到集合中存储。练习使用的数据库表:
drop table if exists student;
create table student(
id int primary key auto_increment,
name varchar(10),
gender char(1)
);
insert into student(name,gender) values
('张三','男'),
('李四','女'),
('王五','男');
在 Navicat 中查看数据表:
2. 实战案例
查询学生信息表数据,封装为 Student 类对象,并存放在 ArrayList 集合中。
思路:要解决这个问题,大概分为以下几个步骤:
- 创建一个 Student 实体类
- 查询数据库中的数据,并且赋值给对象的属性
- 将对象存储到 ArrayList 集合中
第一步:创建一个Student 实体类,并定义 set() 方法,重写 Object 类中的 toString 方法,方便查看打印效果。
public class Student
private int id;
private String name;
private String gender;
public int getId()
return id;
public void setId(int id)
this.id = id;
public void setName(String name)
this.name = name;
public void setGender(String gender)
this.gender = gender;
@Override
public String toString()
return "Student" +
"id=" + id +
", name='" + name + '\\'' +
", gender='" + gender + '\\'' +
'';
小tips :在 idea 中使用 Alt + Inset 快捷键可以快速给类添加或重写一些方法,例如 get() ,set() ,toString() 方法等。使用 Ctrl + 鼠标左键可以快速选择多项方法。
第二步:使用 Java 代码操作数据库,查询数据库表中所有学生信息并通过 set() 方法赋值给 Student 类的对象,将对象存储到集合中。
public class JDBCDemo
public static void main(String[] args) throws Exception
//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. 定义sql
String sql = "select * from student";
//4. 获取sql执行对象
Statement stmt = conn.createStatement();
//5. 执行sql
ResultSet rs = stmt.executeQuery(sql);
//6. 处理结果
List<Student> students = new ArrayList<>();
while (rs.next())
Student s = new Student();
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();
运行结果:
这样,我们的程序就达到了预期的效果,将来需要使用的数据全部封装为对象并存放在了集合中。
3. 增删改查操作练习
在数据库连接池入门篇中,我们学习了 Druid 连接池的使用,数据库连接池允许重复使用一个现有的数据库连接对象,提升了系统的响应速度和时间。下面我们使用数据库连接池来练习解决上面的问题,并且在获取 sql 执行对象时,我们使用 PreparedStatement 类,解决sql 注入的问题。
3.1 查询所有
查询所有数据,并把查询结果数据封装为对象存储在集合中,这里的数据表,Student 实体类和上面例子中相同。
public class DruidDemo
public static void main(String[] args) throws Exception
//加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接对象
Connection conn = dataSource.getConnection();
//定义sql
String sql = "select * from student";
//获取 sql 执行对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//执行 sql
ResultSet rs = pstmt.executeQuery();
//处理数据,将查询结果数据封装为对象存储在集合中
List<Student> students = new ArrayList<>();
while (rs.next())
Student s = new Student();
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 添加数据
现在演示往数据库中添加一条记录,应用场景为用户在客户端输入一条数据时,我们需要将数据添加到数据库。示例:
public class DruidDemo
public static void main(String[] args) throws Exception
//接收到用户的数据
int id=4;
String name="小美";
String gender="女";
//加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接对象
Connection conn = dataSource.getConnection();
//定义sql
String sql = "insert into student values(?,?,?)";
//获取 sql 执行对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置参数
pstmt.setInt(1,id);
pstmt.setString(2,name);
pstmt.setString(3,gender);
//执行 sql
int count = pstmt.executeUpdate();//返回受影响的行数
//处理数据
if(count>0)
System.out.println("添加成功");
else
System.out.println("添加失败");
//释放资源
pstmt.close();
conn.close();
此时的数据表:
3.3 修改数据
现在数据表中的数据,应用场景为用户在客户端修改数据,对应数据库中的数据也要完成修改。示例:
public class DruidDemo
public static void main(String[] args) throws Exception
//接收到用户的数据
int id=1;
String name="小王";
String gender="女";
//加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接对象
Connection conn = dataSource.getConnection();
//定义sql
String 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);
//执行 sql
int count = pstmt.executeUpdate();//返回受影响的行数
//处理数据
if(count>0)
System.out.println("修改成功");
else
System.out.println("修改失败");
//释放资源
pstmt.close();
conn.close();
此时的数据表:
3.4 删除数据
下面演示删除数据,用户在客户端选择删除某条数据记录时,数据库中的数据也要完成删除操作。示例:
public class DruidDemo
public static void main(String[] args) throws Exception
//接收到用户的数据
int id=4;
//加载配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//获取数据库连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接对象
Connection conn = dataSource.getConnection();
//定义sql
String sql = "delete from student where id=?";
//获取 sql 执行对象
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置参数
pstmt.setInt(1,id);
//执行 sql
int count = pstmt.executeUpdate();//返回受影响的行数
//处理数据
if(count>0)
System.out.println("删除成功");
else
System.out.println("删除失败");
//释放资源
pstmt.close();
conn.close();
此时的数据表:
4. 总结
本文是 JDBC 基础教程的练习篇,学会使用 Java 代码操作数据库,完成数据库,数据表,表中数据的增删改查操作。
大家新年好,下期见。
🔖Java编程基础教程系列
以上是关于如何使用JDBC操作数据库,JDBC实战案例详细解读的主要内容,如果未能解决你的问题,请参考以下文章