📅  最后修改于: 2023-12-03 14:43:05.526000             🧑  作者: Mango
JDBC (Java DataBase Connectivity)是用于在Java应用程序和数据库之间进行连接的Java API。JDBC使用标准的SQL(结构化查询语言)来在Java应用程序中执行SQL语句。
使用JDBC连接到数据库需要以下步骤:
在使用JDBC连接之前,需要加载合适的JDBC驱动程序。
// 加载MySQL驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
连接数据库需要使用JDBC的 Connection
接口。创建连接时,需要提供数据库的URL、用户名和密码。
// 数据库URL
String url = "jdbc:mysql://localhost:3306/mydb";
// 数据库用户名和密码
String username = "root";
String password = "root";
// 建立连接
Connection conn = DriverManager.getConnection(url, username, password);
使用JDBC连接数据库时,还需要创建语句对象。JDBC提供了以下3个语句对象:
Statement
:用于执行静态SQL语句。PreparedStatement
:用于执行预编译SQL语句。CallableStatement
:用于执行存储过程。// 创建PreparedStatement
String sql = "SELECT id, name, age FROM user WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
执行SQL语句需要调用语句对象的 executeQuery()
或 executeUpdate()
方法。如果执行查询操作,使用 executeQuery()
方法获取结果集。如果执行更新操作,使用 executeUpdate()
方法获取更新的行数。
// 执行查询操作
ResultSet rs = stmt.executeQuery();
// 执行更新操作
int rows = stmt.executeUpdate();
处理结果集需要使用JDBC的 ResultSet
接口。ResultSet
提供了许多方法来获取结果集中的数据。
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
// 处理结果集数据
}
关闭连接需要调用连接对象的 close()
方法。JDBC连接对象是实现了 AutoCloseable
接口的。
conn.close();
JDBC事务用于一起执行的一组SQL语句,被当作一个整体进行提交或回滚。如果一个事务中的任何一条SQL语句失败,整个事务就会回滚。
使用JDBC进行事务管理需要以下步骤:
禁用自动提交可以使用 Connection
对象的 setAutoCommit(false)
方法。
conn.setAutoCommit(false);
执行SQL语句的步骤与前面介绍的相同。
PreparedStatement stmt1 = conn.prepareStatement(sql1);
PreparedStatement stmt2 = conn.prepareStatement(sql2);
当所有语句执行成功时,调用 commit()
方法提交事务。如果有任意一条语句失败,调用 rollback()
方法回滚事务。
try {
// 执行SQL语句
stmt1.executeUpdate();
stmt2.executeUpdate();
// 提交事务
conn.commit();
} catch (SQLException e) {
// 回滚事务
conn.rollback();
}
启用自动提交可以使用 Connection
对象的 setAutoCommit(true)
方法。
conn.setAutoCommit(true);
使用JDBC批处理可以一次执行多条SQL语句,提高数据库访问效率。
创建批处理语句需要使用 Statement
或 PreparedStatement
对象的 addBatch()
方法。
PreparedStatement stmt = conn.prepareStatement(sql1);
stmt.setString(1, "John");
stmt.setString(2, "Doe");
stmt.addBatch();
stmt.setString(1, "Jane");
stmt.setString(2, "Doe");
stmt.addBatch();
执行批处理需要使用语句对象的 executeBatch()
方法。
int[] result = stmt.executeBatch();
处理结果集和前面介绍的相同。
for (int i = 0; i < result.length; i++) {
// 处理结果集
}
下面是一个连接MySQL数据库并查询表数据的Java程序示例。
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
// 加载MySQL驱动程序
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return;
}
// 数据库URL
String url = "jdbc:mysql://localhost:3306/mydb";
// 数据库用户名和密码
String username = "root";
String password = "root";
// 建立连接
try (Connection conn = DriverManager.getConnection(url, username, password)) {
// 创建PreparedStatement
String sql = "SELECT id, name, age FROM user WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, 1);
// 执行查询操作
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id = " + id + ", name = " + name + ", age = " + age);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JDBC是Java应用程序连接数据库的标准API,可以方便地与各种数据库进行通信。熟悉JDBC的使用方法有助于开发高效、可靠、安全的Java数据库应用程序。