JDBC从入门到实战:DriverManager、Connection、PreparedStatement与ResultSet详解
一.JDBS
1.介绍
JDBC:就是使用Java语言操作关系型数据库的一套API
本质:
sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
各个数据库厂商去实现这套接口,提供数据库驱动jar包。
可以使用这套(JDBS)编程。真正执行的代码是驱动jar包中的实现类。
2.入门程序
1)完成数据修改
package org.junit.jupiter; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Exception; import java.sql.Statement; public class JdbcTest { //JDBC入门程序 @Test public void testUpdate() throws Exception { //1.导入数据库驱动 Class.forName( "com.mysql.cj.jdbc.Driver" );//使用forName方法加载数据库驱动 //2.获取数据库连接 String url = "jdbc:mysql://localhost:3306/web01"; String username = "root"; String password = "1234"; DriverManager.getConnection(url,username,password); //3.获取SQL语句执行对象 Statement statement = connection.createStatement(); //4.执行SQL语句 int i = statement.executeUpdate("update account set money = 1000 where id = 1"); System.out.println("sql执行完毕次数" + i); //5.释放资源 Statment.close(); connection.close(); } }2)完成查询数据
需求:基于JDBC执行如下select语句,将查询语句封装到User对象中
SQL:select * from user where username = "daqiao" and password = "123456"
AI提示词:
你是一名java开发工程师,帮我基于JDBC程序来操作数据库,执行如下SQL语句:select id,username,password,name,age from user where username = 'daqiao' and password = '123456';
并将查询的每一行记录,都封装到实体类User中,然后将User对象的数据输出到控制台中。
User 实体类属性如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id; //ID
private String username; //用户名
private String password; //密码
private String name; //姓名
private Integer age; //年龄
}
import java.sql.*; public class JdbcUserQuery { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC&characterEncoding=utf8"; String username = "数据库用户名"; String password = "数据库密码"; // SQL查询语句 String sql = "select id,username,password,name,age from user where username = 'daqiao' and password = '123456'"; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 1. 加载数据库驱动(MySQL 8.0+使用com.mysql.cj.jdbc.Driver) Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 获取数据库连接 conn = DriverManager.getConnection(url, username, password); // 3. 创建PreparedStatement对象 pstmt = conn.prepareStatement(sql); // 4. 执行查询,获取结果集 rs = pstmt.executeQuery(); // 5. 处理结果集 while (rs.next()) { // 创建User对象 User user = new User(); // 设置属性值 user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); // 输出用户信息 System.out.println("查询到用户信息:"); System.out.println("ID: " + user.getId()); System.out.println("用户名: " + user.getUsername()); System.out.println("密码: " + user.getPassword()); System.out.println("姓名: " + user.getName()); System.out.println("年龄: " + user.getAge()); } } catch (ClassNotFoundException e) { e.printStackTrace(); System.out.println("数据库驱动加载失败"); } catch (SQLException e) { e.printStackTrace(); System.out.println("数据库操作异常"); } finally { // 6. 关闭资源(按ResultSet ->PreparedStatement->Connection的顺序关闭) try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }模板化操作,AI可替代,不需要重复写
