JDBC接口
文章目录
- JDBC介绍
- 入门程序
- 预编译
- 代码剖析
JDBC介绍
JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。
- sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包。
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
入门程序
修改数据库中的数据
- 创建maven项目
- 创建一个数据库,创建一个user表
create table user(id int unsigned primary key auto_increment comment 'ID,主键',username varchar(20) comment '用户名',password varchar(32) comment '密码',name varchar(10) comment '姓名',age tinyint unsigned comment '年龄'
) comment '用户表';insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),(2, 'xiaoqiao', '123456', '小乔', 18),(3, 'diaochan', '123456', '貂蝉', 24),(4, 'lvbu', '123456', '吕布', 28),(5, 'zhaoyun', '12345678', '赵云', 27);
- pom.xml中引入依赖
<dependencies><!-- MySQL JDBC driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency>
</dependencies>
- 编写测试类,定义测试方法
package baichu;import com.baochu.pojo.User;
import org.junit.Test;import java.sql.*;public class jdbcTest {@Testpublic void testUpdate() throws ClassNotFoundException, SQLException {//注册驱动Class.forName("com.mysql.cj.jdbc.Driver");//获取数据库连接String url = "jdbc:mysql://localhost:3306/web01";String password = "gubaichu";String username = "root";Connection connection = DriverManager.getConnection(url,username,password);//获取数据库对象Statement statement = connection.createStatement();//执行sqlint i = statement.executeUpdate("update user set age = 28 where id =1");System.out.println(i);//释放资源statement.close();connection.close();}
}
5.结果
预编译
查询数据并封装为一个User类
package com.baochu.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private String password;private String name;private Integer age;
}jdbc
package baichu;import com.baochu.pojo.User;
import org.junit.Test;import java.sql.*;public class jdbcTest {@Testpublic void tsetSelect(){String URL = "jdbc:mysql://localhost:3306/web01";String USERNAME = "root";String PASSWORD = "gubaichu";Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null; //封装查询返回结果try {// 1. 加载驱动(可选,新版 JDBC 自动加载)Class.forName("com.mysql.cj.jdbc.Driver");// 2. 获取数据库连接conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);// 3. 编写 SQL 查询语句String sql = "SELECT id, username, password, name, age FROM user WHERE username = ? AND password = ?";// 4. 创建 PreparedStatementpstmt = conn.prepareStatement(sql);pstmt.setString(1, "daqiao"); // 设置第一个参数pstmt.setString(2, "123456"); // 设置第二个参数// 5. 执行查询rs = pstmt.executeQuery();// 6. 处理结果集boolean found = false;while (rs.next()) {found = true;User user = new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"),rs.getString("name"),rs.getInt("age"));// 输出到控制台System.out.println(user);}if (!found) {System.out.println("未找到匹配的用户记录。");}} catch (ClassNotFoundException e) {System.err.println("MySQL 驱动未找到!");e.printStackTrace();} catch (SQLException e) {System.err.println("数据库操作异常!");e.printStackTrace();} finally {// 7. 关闭资源(建议使用 try-with-resources 更安全)try {if (rs != null) rs.close();if (pstmt != null) pstmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}
代码剖析
ResultSet(结果集对象):封装了DQL查询语句查询的结果。
- next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean。
- getXxx(…):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。
运行结果: