7.1. JDBC简介

打印 上一主题 下一主题

主题 905|帖子 905|积分 2715

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
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. public class JdbcConnectExample {
  4.     public static void main(String[] args) {
  5.         try {
  6.             // 加载数据库驱动
  7.             Class.forName("com.mysql.cj.jdbc.Driver");
  8.             // 连接到数据库
  9.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  10.             String username = "root";
  11.             String password = "mypassword";
  12.             Connection connection = DriverManager.getConnection(url, username, password);
  13.             System.out.println("Connected to database!");
  14.             // 关闭连接
  15.             connection.close();
  16.         } catch (Exception e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20. }
复制代码
4. 执行SQL查询
要使用JDBC执行SQL查询,可以创建一个Statement对象,然后调用其executeQuery()方法。以下是一个简单示例,演示如何查询数据库中的数据:
java
Copy
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class JdbcQueryExample {
  6.     public static void main(String[] args) {
  7.         try {
  8.             // 加载数据库驱动并连接到数据库
  9.             Class.forName("com.mysql.cj.jdbc.Driver");
  10.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  11.             String username = "root";
  12.             String password = "mypassword";
  13.             Connection connection = DriverManager.getConnection(url, username, password);
  14.             // 创建Statement对象并执行SQL查询
  15.             Statement statement = connection.createStatement();
  16.             String sql = "SELECT id, name FROM users";
  17.             ResultSet resultSet = statement.executeQuery(sql);
  18.             // 处理结果集
  19.             while (resultSet.next()) {
  20.                 int id = resultSet.getInt("id");
  21.                 String name = resultSet.getString("name");
  22.                 System.out.println("ID: " + id + ", Name: " + name);
  23.             }
  24.             // 关闭资源
  25.             resultSet.close();
  26.             statement.close();
  27.             connection.close();
  28.         } catch (Exception e) {
  29.             e.printStackTrace();
  30.         }
  31.     }
  32. }
复制代码
5. 执行SQL更新
要使用JDBC执行SQL更新(如插入、更新或删除),可以创建一个Statement对象,然后调用其executeUpdate()方法。以下是一个简单示例,演示如何向数据库中插入数据:
java
Copy
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.Statement;
  4. public class JdbcUpdateExample {
  5.     public static void main(String[] args) {
  6.         try {
  7.             // 加载数据库驱动并连接到数据库
  8.             Class.forName("com.mysql.cj.jdbc.Driver");
  9.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  10.             String username = "root";
  11.             String password = "mypassword";
  12.             Connection connection = DriverManager.getConnection(url, username, password);
  13.             // 创建Statement对象并执行SQL更新
  14.             Statement statement = connection.createStatement();
  15.             String sql = "INSERT INTO users (name, age) VALUES ('John Doe', 30)";
  16.             int rowsAffected = statement.executeUpdate(sql);
  17.             System.out.println("Rows affected: " + rowsAffected);
  18.             // 关闭资源
  19.             statement.close();
  20.             connection.close();
  21.         } catch (Exception e) {
  22.             e.printStackTrace();
  23.         }
  24.     }
  25. }
  26. **6. 使用PreparedStatement**
  27. `PreparedStatement`是一个预编译的`Statement`对象,可以提高SQL语句的执行效率。它还可以防止SQL注入攻击。以下是一个简单示例,演示如何使用`PreparedStatement`插入数据:
  28. ```java
  29. import java.sql.Connection;
  30. import java.sql.DriverManager;
  31. import java.sql.PreparedStatement;
  32. public class JdbcPreparedStatementExample {
  33.     public static void main(String[] args) {
  34.         try {
  35.             // 加载数据库驱动并连接到数据库
  36.             Class.forName("com.mysql.cj.jdbc.Driver");
  37.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  38.             String username = "root";
  39.             String password = "mypassword";
  40.             Connection connection = DriverManager.getConnection(url, username, password);
  41.             // 创建PreparedStatement对象并执行SQL更新
  42.             String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
  43.             PreparedStatement preparedStatement = connection.prepareStatement(sql);
  44.             preparedStatement.setString(1, "Jane Doe");
  45.             preparedStatement.setInt(2, 28);
  46.             int rowsAffected = preparedStatement.executeUpdate();
  47.             System.out.println("Rows affected: " + rowsAffected);
  48.             // 关闭资源
  49.             preparedStatement.close();
  50.             connection.close();
  51.         } catch (Exception e) {
  52.             e.printStackTrace();
  53.         }
  54.     }
  55. }
复制代码
7. 事务处理
事务是一组逻辑操作单元,执行这些操作要么全部成功,要么全部失败。在JDBC中,可以使用Connection对象的commit()和rollback()方法进行事务处理。以下是一个简单示例,演示如何使用事务处理:
java
Copy
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. public class JdbcTransactionExample {
  5.     public static void main(String[] args) {
  6.         Connection connection = null;
  7.         PreparedStatement preparedStatement = null;
  8.         try {
  9.             // 加载数据库驱动并连接到数据库
  10.             Class.forName("com.mysql.cj.jdbc.Driver");
  11.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  12.             String username = "root";
  13.             String password = "mypassword";
  14.             connection = DriverManager.getConnection(url, username, password);
  15.             // 关闭自动提交(开启事务)
  16.             connection.setAutoCommit(false);
  17.             // 执行SQL更新
  18.             String sql = "UPDATE users SET age = age + 1 WHERE id = ?";
  19.             preparedStatement = connection.prepareStatement(sql);
  20.             preparedStatement.setInt(1, 1);
  21.             preparedStatement.executeUpdate();
  22.             // 提交事务
  23.             connection.commit();
  24.             System.out.println("Transaction committed.");
  25.         } catch (Exception e) {
  26.             // 回滚事务
  27.             try {
  28.                 if (connection != null) {
  29.                     connection.rollback();
  30.                     System.out.println("Transaction rolled back.");
  31.                 }
  32.             } catch (Exception ex) {
  33.                 ex.printStackTrace();
  34.             }
  35.             e.printStackTrace();
  36.         } finally {
  37.             // 关闭资源
  38.             try {
  39.                 if (preparedStatement != null) {
  40.                     preparedStatement.close();
  41.                 }
  42.                 if (connection != null) {
  43.                     connection.close();
  44.                 }
  45.             } catch (Exception e) {
  46.                 e.printStackTrace();
  47.             }
  48.         }
  49.     }
  50. }
复制代码
8. 关闭资源
在JDBC中,需要确保及时关闭资源,如Connection、Statement和ResultSet等。可以使用close()方法或者Java 7中引入的try-with-resources语句进行资源关闭。以下是一个简单示例,演示如何使用try-with-resources关闭资源:
java
Copy
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class JdbcCloseResourceExample {
  6.     public static void main(String[] args) {
  7.         try {
  8.             // 加载数据库驱动
  9.             Class.forName("com.mysql.cj.jdbc.Driver");
  10.             // 连接到数据库
  11.             String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
  12.             String username = "root";
  13.             String password = "mypassword";
  14.             try (Connection connection = DriverManager.getConnection(url, username, password);
  15.                  Statement statement = connection.createStatement()) {
  16.                 // 执行SQL查询并处理结果集
复制代码
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表