1. 什么是 JDBC?
JDBC(Java Database Connectivity)是一个 Java API,用于连贯和执行 SQL 语句与关系型数据库进行交互。JDBC 提供了一组接口和类,使 Java 程序可能与各种数据库通信,如 MySQL、Oracle、PostgreSQL 等。
2. JDBC 的次要组件
JDBC 次要由以下几个组件组成:
DriverManager
:负责加载数据库驱动,并建设与数据库的连贯。Connection
:示意与数据库的连贯。Statement
:用于执行 SQL 语句。PreparedStatement
:用于执行预编译的 SQL 语句。ResultSet
:示意查问后果集。
3. 连贯数据库
在连贯数据库之前,须要确保曾经装置了相应的数据库驱动并将其增加到我的项目中。以下是一个简略示例,演示如何应用 JDBC 连贯到 MySQL 数据库:
java
Copy
import java.sql.Connection;
import java.sql.DriverManager;
public class JdbcConnectExample {public static void main(String[] args) {
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连贯到数据库
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("Connected to database!");
// 敞开连贯
connection.close();} catch (Exception e) {e.printStackTrace();
}
}
}
4. 执行 SQL 查问
要应用 JDBC 执行 SQL 查问,能够创立一个 Statement
对象,而后调用其 executeQuery()
办法。以下是一个简略示例,演示如何查询数据库中的数据:
java
Copy
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcQueryExample {public static void main(String[] args) {
try {
// 加载数据库驱动并连贯到数据库
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
Connection connection = DriverManager.getConnection(url, username, password);
// 创立 Statement 对象并执行 SQL 查问
Statement statement = connection.createStatement();
String sql = "SELECT id, name FROM users";
ResultSet resultSet = statement.executeQuery(sql);
// 处理结果集
while (resultSet.next()) {int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID:" + id + ", Name:" + name);
}
// 敞开资源
resultSet.close();
statement.close();
connection.close();} catch (Exception e) {e.printStackTrace();
}
}
}
5. 执行 SQL 更新
要应用 JDBC 执行 SQL 更新(如插入、更新或删除),能够创立一个 Statement
对象,而后调用其 executeUpdate()
办法。以下是一个简略示例,演示如何向数据库中插入数据:
java
Copy
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcUpdateExample {public static void main(String[] args) {
try {
// 加载数据库驱动并连贯到数据库
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
Connection connection = DriverManager.getConnection(url, username, password);
// 创立 Statement 对象并执行 SQL 更新
Statement statement = connection.createStatement();
String sql = "INSERT INTO users (name, age) VALUES ('John Doe', 30)";
int rowsAffected = statement.executeUpdate(sql);
System.out.println("Rows affected:" + rowsAffected);
// 敞开资源
statement.close();
connection.close();} catch (Exception e) {e.printStackTrace();
}
}
}
**6. 应用 PreparedStatement**
`PreparedStatement` 是一个预编译的 `Statement` 对象,能够进步 SQL 语句的执行效率。它还能够避免 SQL 注入攻打。以下是一个简略示例,演示如何应用 `PreparedStatement` 插入数据:```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JdbcPreparedStatementExample {public static void main(String[] args) {
try {
// 加载数据库驱动并连贯到数据库
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
Connection connection = DriverManager.getConnection(url, username, password);
// 创立 PreparedStatement 对象并执行 SQL 更新
String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "Jane Doe");
preparedStatement.setInt(2, 28);
int rowsAffected = preparedStatement.executeUpdate();
System.out.println("Rows affected:" + rowsAffected);
// 敞开资源
preparedStatement.close();
connection.close();} catch (Exception e) {e.printStackTrace();
}
}
}
7. 事务处理
事务是一组逻辑操作单元,执行这些操作要么全副胜利,要么全副失败。在 JDBC 中,能够应用 Connection
对象的 commit()
和rollback()
办法进行事务处理。以下是一个简略示例,演示如何应用事务处理:
java
Copy
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JdbcTransactionExample {public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
// 加载数据库驱动并连贯到数据库
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
connection = DriverManager.getConnection(url, username, password);
// 敞开主动提交(开启事务)connection.setAutoCommit(false);
// 执行 SQL 更新
String sql = "UPDATE users SET age = age + 1 WHERE id = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 1);
preparedStatement.executeUpdate();
// 提交事务
connection.commit();
System.out.println("Transaction committed.");
} catch (Exception e) {
// 回滚事务
try {if (connection != null) {connection.rollback();
System.out.println("Transaction rolled back.");
}
} catch (Exception ex) {ex.printStackTrace();
}
e.printStackTrace();} finally {
// 敞开资源
try {if (preparedStatement != null) {preparedStatement.close();
}
if (connection != null) {connection.close();
}
} catch (Exception e) {e.printStackTrace();
}
}
}
}
8. 敞开资源
在 JDBC 中,须要确保及时敞开资源,如 Connection
、Statement
和ResultSet
等。能够应用 close()
办法或者 Java 7 中引入的 try-with-resources
语句进行资源敞开。以下是一个简略示例,演示如何应用 try-with-resources
敞开资源:
java
Copy
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcCloseResourceExample {public static void main(String[] args) {
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连贯到数据库
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
String username = "root";
String password = "mypassword";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement()) {// 执行 SQL 查问并处理结果集
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g