6.JDBC
1.什么是JDBC?
-
概念
-
JDBC 即 Java Database Connectivity(Java 数据库连接),是 Java 编程语言中用于与各种关系型数据库进行交互的标准 API。
-
JDBC 为 Java 开发人员提供了一套统一的接口,使得他们可以使用相同的 Java 代码来连接不同类型的关系型数据库,如 MySQL、Oracle、SQL Server 等,而不需要关心具体数据库的实现细节。通过 JDBC,Java 程序可以执行 SQL 语句,实现对数据库的增删改查等操作。
-
-
工作原理
JDBC 采用了一种分层的架构,主要包括两层:
-
JDBC API:面向 Java 开发人员,提供了一系列的接口和类,用于与数据库进行交互,如建立连接、执行 SQL 语句、处理结果集等。
-
JDBC Driver Manager:负责管理 JDBC 驱动程序。当 Java 程序需要连接数据库时,Driver Manager 会根据指定的数据库 URL 加载相应的驱动程序,并建立与数据库的连接。
-
JDBC 驱动程序:由各个数据库厂商提供,实现了 JDBC API 定义的接口,负责与具体的数据库进行通信。不同的数据库需要使用不同的 JDBC 驱动程序。
-
-
主要组件
-
DriverManager:这是 JDBC 的核心类之一,用于管理 JDBC 驱动程序。它提供了获取数据库连接的静态方法
getConnection
,可以根据数据库的 URL、用户名和密码来建立与数据库的连接。 -
Connection:代表与数据库的一个连接会话。通过
Connection
对象可以创建Statement
、PreparedStatement
或CallableStatement
对象,用于执行 SQL 语句。 -
Statement:用于执行静态 SQL 语句。
Statement
对象可以执行简单的 SQL 查询、插入、更新和删除操作。 -
PreparedStatement:是
Statement
的子接口,用于执行预编译的 SQL 语句。与Statement
不同,PreparedStatement
可以接收参数,并且可以防止 SQL 注入攻击,提高了代码的安全性和性能。 -
CallableStatement:用于执行数据库中的存储过程。它继承自
PreparedStatement
,可以调用数据库中预定义的存储过程。 -
ResultSet:用于处理 SQL 查询的结果集。当执行查询语句时,会返回一个
ResultSet
对象,通过该对象可以遍历查询结果,并获取每一行的数据。
-
-
使用步骤
使用 JDBC 连接数据库并执行操作通常需要以下几个步骤:
-
加载 JDBC 驱动程序:使用
Class.forName()
方法加载相应的 JDBC 驱动程序。 -
建立数据库连接:使用
DriverManager.getConnection()
方法建立与数据库的连接。 -
创建执行 SQL 语句的对象:根据需要创建
Statement
、PreparedStatement
或CallableStatement
对象。 -
执行 SQL 语句:调用相应对象的方法执行 SQL 语句。
-
处理结果集:如果执行的是查询语句,需要处理返回的
ResultSet
对象。 -
关闭资源:使用完数据库连接、
Statement
和ResultSet
后,需要关闭它们,以释放资源。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcExample { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/testdb"; String username = "root"; String password = "password"; try { // 1. 加载 JDBC 驱动程序 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 建立数据库连接 Connection connection = DriverManager.getConnection(url, username, password); // 3. 创建执行 SQL 语句的对象 Statement statement = connection.createStatement(); // 4. 执行 SQL 语句 String sql = "SELECT * FROM users"; ResultSet resultSet = statement.executeQuery(sql); // 5. 处理结果集 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 6. 关闭资源 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
2.连接数据库的步骤
1.导包
-
右键找到Build Path 鼠标放在上面就可以看到右侧 选择Add External Archives或者Configure Build Path 都是可以的
-
选项卡要选中Libraries 右侧的Add External JARs
-
选择jar包
-
选好了就可以点击Apply and Close
-
项目下面就会出现这个包啦
2.注册驱动类
提前处理异常 try /catch
com.mysql.jdbc.Driver:Driver+回车 就会出现这个包,复制再删除 try{ //注册驱动类 Class.forName("com.mysql.jdbc.Driver") }catch(Exception e){ e.printStackTrace() }
3.连接数据库
-
url:jdbc:mysql://localhost:3306/数据库名
DriverManager.getConnection("jdbc:mysql://localhost:3306/T297", "root", "8023"); jdbc:数据库://主机地址:端口号/数据库名
import java.sql.Connection; import java.sql.DriverManager; //连接数据库 Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/T297", "root", "123456")
4.获取执行sql语句的对象
String sql = "SELECT * FROM users"; PreparedStatement ps=con.prepareStatement(sql)
5.给占位符赋值
String sql = "delete from t_student where sid=?"; ps.setInt(1,sid) PreparedStatement ps=con.prepareStatement(sql)
6.执行sql语句
-
接收受影响行数
-
接收查询到的结果集
int i = ps.executeUpdate();
7.处理结果
-
获取值
-
根据字段序号获取
-
根据字段名获取
-
if(i>0){ System.out.printIn("添加成功") }else{ System.out.printIn("添加失败") }
8.关闭连接
ps.close(); con.close();
2.讲解增删改查
-
eclipse连接数据库
-
添加数据
//获取执行sql语句的对象 String sql = "insert into t_student(name,age,sex) values('小o',20,'gril')"; PreparedStatement ps=con.prepareStatement(sql) //执行sql语句 int i = ps.executeUpdate(); //处理结果 if(i>0){ System.out.printIn("添加成功") }else{ System.out.printIn("添加失败") } //关闭连接 ps.close(); con.close();
-
修改数据
String sql = "update t_student set name=?,age=?,sex=?"; Scanner sc=new Scanner(System.in) System.out.printIn("请输入修改后的姓名"); String name=sc.next() ps.setString(1,name); System.out.printIn("请输入修改后的年龄"); String age=sc.next() ps.setInt(2,age) System.out.printIn("请输入修改后的性别"); String sex=sc.next() ps.setSex(3,sex) PreparedStatement ps=con.prepareStatement(sql)
-
删除数据
String sql = "delete from t_student where sid=?"; ps.setInt(1,sid) PreparedStatement ps=con.prepareStatement(sql)
-
查询数据
// 4. 执行 SQL 语句 String sql = "SELECT * FROM users"; ResultSet resultSet = statement.executeQuery(sql); // 5. 处理结果集 while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } // 6. 关闭资源 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); }