什么是JDBC?
JDBC,即Java数据库连接(Java Database Connectivity)。是一套跟数据库交互,执行SQL语句的Java API,它允许Java程序与各种数据库连接并进行交互。
JDBC连接并操作数据库的步骤
- 项目中引入jar;
- 加载驱动;
- 获取连接;
- 获取Statement对象;
- 执行SQL;
- 处理结果集;
- 释放资源,关闭连接;
JDBC使用案例
案例环境
idea2023 + jdk8 + mysql8 + mysql-connector-java-8.0.29.jar
项目中引入jar
- 普通的JavaWeb项目,在WEB-INF目录下创建lib文件夹,将jar拷贝到lib目录下,鼠标选中jar包,右键选择“Add as Library”,弹框中点击“ok”即可;
- Maven项目,引入依赖即可
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency>
加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
参数说明:
com.mysql.cj.jdbc.Driver:驱动类的全限定名;通过Class.forName()方法可以将驱动类加载到JVM内存中;
获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name","username","password");
Connection接口是与数据库建立连接的接口;mysql-connector-java.jar包中封装了获取Connection对象的方式,即DriverManager.getConnection()方法;
参数说明:
database_name:要连接的数据库名称,替换为实际的数据库名称;
username:连接数据库使用的用户名,替换为实际的用户名;
password:连接数据库使用的密码,替换为实际的密码;
获取Statement对象
String sql = "select * from user";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
Connection类中封装了获取PreparedStatement对象的方法,即prepareStatement()方法,方法需要传递一个参数;
参数说明:
sql:String类型,要执行的SQL语句;
注意:PreparedStatement接口是Statement类的子接口,是在Statement接口的基础上做了功能增强;
执行SQL
ResultSet resultSet = preparedStatement.executeQuery();
PreparedStatement对象封装了执行SQL语句的方法,即executeQuery()方法,该方法会返回一个结果集,为ResultSet类型;
处理结果集
List<User> users = new ArrayList<>();
// 可能会有多条数据
while (resultSet.next()){
User user = new User();
// 给用户对象各个属性赋值
user.setUserId(resultSet.getInt("user_id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
// 将当前user对象添加到users集合中
users.add(user);
}
释放资源
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
注意关闭顺序,先ResultSet对象,再Statement对象,最后Connection对象;这几个对象可能会为空,在关闭之前应判断是否为空;
JDBC工具类
在实际的使用过程中,建议将JDBC封装,提供工具类来使用。下面是对JDBC的简单封装,参考使用:
package com.iflytek.utils;
import java.sql.*;
/**
* jdbc工具类
*
* 使用jdbc操作数据库,分为几步??
*
* 1.引入jar包:简化了大部分工作 第三方给我们提供的功能
* 2.加载驱动
* 3.获取数据库连接:Connection对象
* 4.获取到Statement对象
* 5.通过Statement对象执行SQL,返回结果集ResultSet对象
* 6.封装ResultSet对象数据
* 7.释放资源,关闭连接
*/
public class JdbcUtil {
// 数据库连接信息
private final static String URL = "jdbc:mysql://localhost:3306/teacher_management";
private final static String USERNAME = "root";
private final static String PASSWORD = "123";
// 获取连接之前,保证驱动是已经加载完成
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载驱动异常");
throw new RuntimeException(e);
}
}
// 获取数据库连接
public static Connection getConn() throws SQLException {
return DriverManager.getConnection(URL, USERNAME, PASSWORD);
}
// 释放资源
public static void close(Connection connection, Statement statement, ResultSet resultSet) throws SQLException {
if (resultSet != null) resultSet.close();
if (statement != null) statement.close();
if (connection != null) connection.close();
}
}