JDBC 连接数据库
流程
-
加载数据库驱动:(老版 新版JDBC8.0直接建立连接)
在开始之前,您需要加载 JDBC 驱动,这样 Java 应用程序就能知道如何与数据库通信。这通常是通过调用Class.forName()
实现的。 -
建立连接:
使用DriverManager.getConnection()
方法建立与数据库的连接。您需要提供数据库的 URL、用户名和密码。
Connection是数据库的连接对象,可以通过连接对象来创建一个Statement用于执行SQL语句Connection connection = DriverManager.getConnection(url,user,password);
-
创建
Statement
或PreparedStatement
对象:
一旦连接建立,您可以创建一个Statement
或PreparedStatement
对象来执行 SQL 语句。PreparedStatement
相比Statement
,可以预编译 SQL 语句,并防止 SQL 注入攻击。Statement statement = connection.createStatement()
-
执行 SQL 语句:
使用Statement
或PreparedStatement
对象执行 SQL 语句。这可以是查询(SELECT)、更新(UPDATE)、插入(INSERT)或删除(DELETE)操作。 -
处理结果:
如果执行的是查询操作,您需要处理返回的ResultSet
对象。可以遍历这个对象来获取查询结果。 -
关闭连接:(新版Java 直接try中关闭连接)
操作完成后,关闭Statement
/PreparedStatement
和连接。这是非常重要的,因为打开的数据库连接会占用资源。
下面是一个简单的 JDBC 使用示例:
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/yourdatabase"; // 数据库的 URL
String user
## 代码
```java
// 数据库连接
@Test
public void test1() {
String url = "jdbc:mysql://localhost:3306/m1?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "root";
//1. 通过DriverManager来获得数据库连接
try (Connection connection =
DriverManager.getConnection(url,user,password);
//2. 创建一个用于执行SQL的Statement对象
Statement statement = connection.createStatement()){ //注意前两步都放在try()中,因为在最后需要释放资源!
//3. 执行SQL语句,并得到结果集
ResultSet set = statement.executeQuery("select * from 表名");
//4. 查看结果
while (set.next()){
...
}
}catch (SQLException e){
e.printStackTrace();
}
//5. 释放资源,try-with-resource语法会自动帮助我们close
}
批处理
代码
@Test
public void test2(){
String url = "jdbc:mysql://localhost:3306/m1?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "root";
String query = "INSERT INTO students (id, name, age) VALUES (?, ?, ?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(query)) {
conn.setAutoCommit(false); // 关闭自动提交
// 添加批处理命令
for (int i = 1; i <= 10; i++) {
pstmt.setInt(1, i);
pstmt.setString(2, "Student" + i);
pstmt.setInt(3, 20 + i);
pstmt.addBatch();
}
int[] updateCounts = pstmt.executeBatch();
conn.commit(); // 提交事务
System.out.println("批处理执行完毕,共插入记录数:" + updateCounts.length);
} catch (SQLException e) {
e.printStackTrace();
}
}
JDBC开启事务
基于您提供的信息,以下是对JDBC事务管理的基本概念和Java代码实现的总结:
JDBC事务管理基础
在JDBC中,默认情况下,每个SQL语句执行后都会自动提交,这被称为自动提交模式(auto-commit mode)。在某些场景中,如需要保持数据的一致性或执行一系列相互依赖的操作时,需要手动管理事务。
关闭自动提交
通过调用Connection.setAutoCommit(false)
,可以关闭自动提交模式。关闭后,所有的SQL操作都不会立即生效,直到显式调用commit()
或rollback()
。
提交和回滚
- 提交(Commit):通过
Connection.commit()
方法可以提交事务,使得自关闭自动提交以来的所有操作永久生效。 - 回滚(Rollback):通过
Connection.rollback()
方法可以回滚事务,撤销自关闭自动提交以来的所有操作。
使用回滚点(Savepoint)
可以在事务中创建一个或多个回滚点(Savepoint)。如果需要回滚到特定的状态,可以使用rollback(savepoint)
方法回滚到该回滚点。
重新开启自动提交
如果需要从手动事务管理切换回自动提交模式,可以通过调用Connection.setAutoCommit(true)
实现。这样做会提交当前事务中的所有更改。
示例代码
public class JDBCTransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/m1?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "root";
try (Connection connection = DriverManager.getConnection(url, user, password)) {
// 关闭自动提交
connection.setAutoCommit(false);
try (Statement statement = connection.createStatement()) {
statement.executeUpdate("INSERT INTO user VALUES ('a', 1234)");
statement.executeUpdate("INSERT INTO user VALUES ('b', 1234)");
// 创建回滚点
Savepoint savepoint = connection.setSavepoint();
statement.executeUpdate("INSERT INTO user VALUES ('c', 1234)");
// 回滚到回滚点
connection.rollback(savepoint);
statement.executeUpdate("INSERT INTO user VALUES ('d', 1234)");
// 提交事务
connection.commit();
} catch (SQLException e) {
connection.rollback(); // 出错时回滚
throw e;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
MySQL 连接下载地址
下载地址:https://dev.mysql.com/downloads/file/?id=477058