使用数据库连接池

最近更新时间: 2026-03-13 09:03:00

本节主要介绍如何使用数据连接池连接 TDSQL PG 数据库。

简介

创建和关闭连接是一个比较昂贵的操作,为了避免频繁地创建和销毁 JDBC 连接,通常应用会选择使用数据库连接池来复用连接。Java 中常用的连接池很多 (HikariCP、c3p0、druid等),应用可以根据业务特点选择使用合适的连接池。本文档以 HikariCP 为例,介绍如何使用数据连接池连接 TDSQL PG 数据库。

连接数据库

准备 TDSQL PG JDBC驱动包

内核Oracle模式下建议使用自研驱动,请联系云平台技术支持工程师获取软件包,可根据开发环境选择合适的驱动包:

  • postgresql-connector-java8-x.x.x.jar 对应 JAVA 8 及以上版本的JDK
  • postgresql-connector-java7-x.x.x.jar 对应 JAVA 7版本的JDK
  • postgresql-connector-java6-x.x.x.jar 对应 JAVA 6版本的JDK

从管理员获取数据库相关信息:包括数据库IP、端口、实例名、用户、密码等。驱动名和连接URL如下:

  • 驱动名 org.postgresql.Driver
  • 连接URL(Oracle模式下需打开oracle_compile参数) jdbc:postgresql://host:port/database?oracle_compile=true
  • 更多JDBC相关配置请参考“使用JDBC连接TDSQL PG”章节

创建 Maven 项目

创建 Maven 项目,如下:

注意

本文档示例项目使用的 IDE 是 IntelliJ IDEA 2024.3.5 (Ultimate Edition),也可根据喜好选择合适的 IDE。

配置 pom.xml 文件,导入项目依赖

配置文件pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tdsql</groupId>
    <artifactId>TDSQL_PG_HikariCP</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- HikariCP -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>4.0.3</version>
        </dependency>
        <!-- TDSQL-PG JDBC Driver -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>1.1.4</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/postgresql-connector-java8-1.1.4.jar</systemPath>
        </dependency>
    </dependencies>
</project>

通过 <dependencies> 定义项目所依赖的组件,主要包括:

  1. HikariCP 依赖包
  2. 下载 TDSQL-PG JDBC 驱动包,并在TDSQL_PG_HikariCP目录下新建lib目录,将驱动包拷贝到lib目录下。

    注意

    本文所有示例需在启用Oracle兼容内核的情况下执行

配置 HikariCP

TDSQL_PG_HikariCP/src/main/resources目录下新建 tdsql_pg.properties 文件,用于配置 JDBC 连接信息,如下:

# 配置JDBC连接信息:host、port、database、user、password 需要替换为数据库管理员提供的数据库连接信息。
jdbcUrl=jdbc:postgresql://host:port/database?oracle_compile=true
username=user
password=password

至此,已完成 HikariCP 项目的基本配置,完整的项目目录结构如下图所示:

开发示例

测试

  • 开发使用的数据表为STUDENT
  CREATE TABLE STUDENT(ID INT PRIMARY KEY, NAME VARCHAR(50));
  • TDSQL_PG_HikariCP/src/main/java/ 下创建 Package: com.tdsql
  • TDSQL_PG_HikariCP/src/main/java/com/tdsql下添加测试类Main,展示了基本的增删查改功能,如下:
package com.tdsql;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.DataSource;

public class Main {
    public static void main(String args[]) {
        try {
            // Load HikariCP configuration
            HikariConfig config = new HikariConfig("/tdsql_pg.properties");
            DataSource ds = new HikariDataSource(config);
            // Get connection
            Connection conn = ds.getConnection();
            Statement stmt = conn.createStatement();

            // Insert data
            System.out.println("------Insert data------");
            stmt.execute("insert into STUDENT values (1,'Alex'),(2,'Bob'),(3,'John')");
            System.out.println("Insert 3 records");

            // Query data
            System.out.println("------Query data------");
            ResultSet rs1 = stmt.executeQuery("select * from STUDENT order by id");
            while (rs1.next()) {
                System.out.println(rs1.getInt(1) + " " + rs1.getString(2));
            }

            // Update data
            System.out.println("------Update data------");
            stmt.execute("update STUDENT set name = 'Alice' where id = 1");
            System.out.println("Update the data where id is 1");

            // Query data
            System.out.println("------Query data------");
            ResultSet rs2 = stmt.executeQuery("select * from STUDENT order by id");
            while (rs2.next()) {
                System.out.println(rs2.getInt(1) + " " + rs2.getString(2));
            }

            // Delete data
            System.out.println("------Delete data------");
            stmt.execute("delete from STUDENT where id = 2");
            System.out.println("Delete the data where id is 2");

            // Query data
            System.out.println("------Query data------");
            ResultSet rs3 = stmt.executeQuery("select * from STUDENT order by id");
            while (rs3.next()) {
                System.out.println(rs3.getInt(1) + " " + rs3.getString(2));
            }

            // Close the object
            rs1.close();
            rs2.close();
            rs3.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • 运行结果如下:
------Insert data------
Insert 3 records
------Query data------
1 Alex
2 Bob
3 John
------Update data------
Update the data where id is 1
------Query data------
1 Alice
2 Bob
3 John
------Delete data------
Delete the data where id is 2
------Query data------
1 Alice
3 John

附:项目结构

至此,完成了 HikariCP 项目的配置和开发示例,项目的整体结构如下图所示: