JDBC的使用

发布 | 2024-08-16 | Mysql

Java 数据库连接(JDBC, Java Database Connectivity) 是 Java 提供的一种用于连接和操作数据库的 API。它允许 Java 程序执行 SQL 语句、获取数据、更新数据、执行事务等数据库操作。

JDBC 基本流程

  1. 加载驱动程序:使用 Class.forName 方法加载数据库驱动程序。
  2. 建立数据库连接:使用 DriverManagergetConnection 方法建立与数据库的连接。
  3. 创建 SQL 语句:使用 Connection 对象的 createStatement 方法创建一个 Statement 对象。
  4. 执行 SQL 语句:使用 Statement 对象的 executeQueryexecuteUpdate 方法执行 SQL 语句。
  5. 处理结果集:使用 ResultSet 对象处理从数据库返回的结果。
  6. 关闭资源:关闭 ResultSetStatementConnection 对象,释放数据库资源。

JDBC 示例代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

public class JDBCExample {
    public static void main(String[] args) {
        try {
            // 1. 加载驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 2. 建立数据库连接
            String url = "jdbc:mysql://localhost:3306/testdb";
            String username = "root";
            String password = "password";
            Connection conn = DriverManager.getConnection(url, username, password);
            
            // 3. 创建 SQL 语句
            Statement stmt = conn.createStatement();
            String sql = "SELECT id, name FROM users";
            
            // 4. 执行 SQL 语句
            ResultSet rs = stmt.executeQuery(sql);
            
            // 5. 处理结果集
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
            }
            
            // 6. 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

封装 JDBC 工具类(JDBCUtil)并使用 Druid 连接池

1. 添加 Druid 依赖

pom.xml 文件中添加 Druid 依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.15</version> <!-- 根据最新版本选择 -->
</dependency>

2. 编写 JDBCUtil 工具类

package com.atguigu.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtil {

    // Druid 数据源对象
    private static DataSource dataSource;

    static {
        try {
            // 加载配置文件
            Properties properties = new Properties();
            InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            properties.load(inputStream);
            
            // 创建 Druid 数据源
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 关闭资源
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3. 配置 druid.properties 文件

resources 目录下创建 druid.properties 文件,用于配置 Druid 连接池:

# 基本连接属性
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
username=root
password=your_password

# 连接池配置
initialSize=5
maxActive=20
minIdle=5

# 超时配置
maxWait=60000

# 检测空闲连接间隔
timeBetweenEvictionRunsMillis=60000

# 连接最小生存时间
minEvictableIdleTimeMillis=300000

# 测试 SQL 连接的有效性
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false

4. 使用 JDBCUtil

import com.atguigu.utils.JDBCUtil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestJDBCUtil {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 获取数据库连接
            conn = JDBCUtil.getConnection();

            // 创建Statement对象
            stmt = conn.createStatement();
            String sql = "SELECT * FROM users";

            // 执行查询
            rs = stmt.executeQuery(sql);

            // 处理结果集
            while (rs.next()) {
                System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            JDBCUtil.close(conn, stmt, rs);
        }
    }
}

标签
没有标签

© 著作权归作者所有

本文由 趣代码Blog 创作,采用 知识共享署名4.0 国际许可协议进行许可,本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。

评论关闭