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`插入数据:```javaimport 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中,须要确保及时敞开资源,如ConnectionStatementResultSet等。能够应用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