本节主要介绍如何使用数据连接池连接 TDSQL PG 数据库。
简介
创建和关闭连接是一个比较昂贵的操作,为了避免频繁地创建和销毁 JDBC 连接,通常应用会选择使用数据库连接池来复用连接。Java 中常用的连接池很多 (HikariCP、c3p0、druid等),应用可以根据业务特点选择使用合适的连接池。本文档以 HikariCP 为例,介绍如何使用数据连接池连接 TDSQL PG 数据库。
连接数据库
准备 TDSQL PG JDBC驱动包
内核Oracle模式下建议使用自研驱动,请联系云平台技术支持工程师获取软件包,可根据开发环境选择合适的驱动包:
postgresql-connector-java8-x.x.x.jar对应 JAVA 8 及以上版本的JDKpostgresql-connector-java7-x.x.x.jar对应 JAVA 7版本的JDKpostgresql-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> 定义项目所依赖的组件,主要包括:
- HikariCP 依赖包
- 下载 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 项目的配置和开发示例,项目的整体结构如下图所示: