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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |