本文将介绍如何使用 HikariCP 连接池、MySQL Connector/J 和 OceanBase 数据库构建一个应用程序,实现基本的数据库操作,包括创建表、插入、删除、更新和查询数据等。
点击下载 hikaricp-mysql-client 示例工程
前提条件
您已安装 OceanBase 数据库并且创建了 MySQL 模式租户。
您已安装 JDK 1.8 和 Maven。
您已安装 Eclipse。
说明本文档运行代码使用的工具是 Eclipse IDE for Java Developers 2022-03 版本,您也可以根据个人喜好选择适合自己的工具运行的示例代码。
操作步骤
本文中给出的操作步骤是在 Windows 环境下使用 Eclipse IDE for Java Developers 2022-03 编译和运行该项目的步骤。如果您使用的是其他操作系统环境或编译器,那么操作步骤可能会略有不同。
将
hikaricp-mysql-client
项目导入到 Eclipse 中。获取 OceanBase 数据库 URL。
修改
hikaricp-mysql-client
项目中的数据库连接信息。运行
hikaricp-mysql-client
项目。
步骤一:将 hikaricp-mysql-client 项目导入到 Eclipse 中
打开 Eclipse,在菜单栏上选择 File->Open Projects from File System。
在弹出的对话框中,点击 Directory 按钮选择项目所在的目录,然后点击 Finish 完成导入。
说明当使用 Eclipse 导入 Maven 项目时,Eclipse 会自动检测项目中的
pom.xml
文件,并根据文件中描述的依赖关系自动下载所需的依赖库,并将它们添加到项目中。查看项目情况。
步骤二:获取 OceanBase 数据库 URL
联系 OceanBase 数据库部署人员或者管理员获取相应的数据库连接串。
示例如下:
obclient -hxxx.xxx.xxx.xxx -P3306 -utest_user001 -p****** -Dtest
更多连接串的信息,请参见 获取连接参数。
根据 OceanBase 数据库连接串信息填写下面 URL 的对应信息。
jdbc:mysql://$host:$port/$database_name?user=$user_name&password=$password&useSSL=false
参数说明:
$host
:OceanBase 数据库连接的域名。$port
:OceanBase 数据库连接端口,MySQL 模式租户默认是 3306。$database_name
:需要访问的数据库名称。$user_name
:租户的连接账号。$password
:提供账户密码。
更多有关 MySQL Connector/J 连接属性信息,请参见 Configuration Properties。
示例如下:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?user=test_user001&password=******&useSSL=false
步骤三:修改 hikaricp-mysql-client 项目中的数据库连接信息
根据 步骤二:获取 OceanBase 数据库 URL 中获取的信息修改文件hikaricp-mysql-client/src/main/resources/db.properties
中的数据库连接信息。
示例如下:
OBServer 节点的 IP 地址为
xxx.xxx.xxx.xxx
。访问端口使用的是 3306。
需要访问的数据库名称为
test
。租户的连接账户是
test_user001
。密码是
******
。
代码如下:
...
jdbcUrl=jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useSSL=false
username=test_user001
password=******
...
步骤四:运行 hikaricp-mysql-client 项目
在项目导航器视图中,找到并展开 src/main/java 目录。
右键点击 Main.java 文件,然后选择 Run As->Java Application。
在 Eclipse 的控制台窗口中来查看项目的日志信息和输出结果。
也可以在 OceanBase 客户端(OBClient)中执行以下 SQL 语句查看结果。
obclient [(none)]> SELECT * FROM test.test_hikaricp;
返回结果如下:
+------+-------------+ | id | name | +------+-------------+ | 1 | test_update | +------+-------------+ 1 row in set
项目代码介绍
点击 hikaricp-mysql-client 下载项目代码,是一个名称为hikaricp-mysql-client.zip
的压缩包。
解压后,得到一个名为hikaricp-mysql-client
的文件夹。目录结构如下所示:
hikaricp-mysql-client
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Main.java
│ └── resources
│ └── db.properties
└── pom.xml
文件说明:
src
:源代码根目录。main
:主代码目录,包含应用程序的主要逻辑。java
:Java 源代码目录。com
:Java 包目录。example
:示例项目的包目录。Main.java
:主类程序示例文件,包含创建表、插入、删除、更新和查询数据等逻辑。resources
:资源文件目录,包含配置文件等。db.properties
:连接池的配置文件,包含了数据库连接的相关参数。pom.xml
:Maven 项目的配置文件,用于管理项目的依赖和构建设置。
pom.xml 代码介绍
pom.xml
文件是 Maven 项目的配置文件,定义了项目的依赖项、插件和构建规则等信息。Maven 是一个 Java 项目管理工具,可以自动下载依赖项、编译和打包项目等操作。
本文pom.xml
文件的代码主要包括以下几个部分:
文件声明语句。
声明本文件是一个 XML 文件,使用的 XML 版本是
1.0
,字符编码方式是UTF-8
。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
配置 POM 的命名空间和 POM 模型版本。
通过
xmlns
指定 POM 的命名空间为http://maven.apache.org/POM/4.0.0
。通过
xmlns:xsi
指定 XML 命名空间http://www.w3.org/2001/XMLSchema-instance
。通过
xsi:schemaLocation
指定 POM 的命名空间为http://maven.apache.org/POM/4.0.0
和 POM 的 XSD 文件的位置为http://maven.apache.org/xsd/maven-4.0.0.xsd
。通过
<modelVersion>
元素指定了该 POM 文件使用的 POM 模型版本为4.0.0
。
代码如下:
<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> <!-- 其他配置 --> </project>
配置基本信息。
通过
<groupId>
指定项目所属组织为com.example
。通过
<artifactId>
指定项目的名称为hikaricp-mysql-client
。通过
<version>
项目的版本号为1.0-SNAPSHOT
。
代码如下:
<groupId>com.example</groupId> <artifactId>hikaricp-mysql-client</artifactId> <version>1.0-SNAPSHOT</version>
配置项目源文件的属性。
指定 Maven 的编译器插件为
maven-compiler-plugin
,并设置了源代码和目标 Java 版本都为 8。这意味着项目的源代码使用 Java 8 特性编写,且编译后的字节码也将兼容 Java 8 运行时环境。这样设置可以确保项目在编译和运行时能够正确地处理 Java 8 的语法和特性。说明Java 1.8 和 Java 8 是同一个版本的不同命名方式。
代码如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build>
配置项目所依赖组件。
添加
mysql-connector-java
依赖库,用于与数据库进行交互:通过
<groupId>
指定依赖项所属的组织为mysql
。通过
<artifactId>
指定依赖项的名称为mysql-connector-java
。通过
<version>
指定依赖项的版本号为5.1.40
。
代码如下:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
添加
HikariCP
依赖库,用于实现高性能的 JDBC 连接池:通过
<groupId>
指定依赖项所属的组织为com.zaxxer
。通过
<artifactId>
指定依赖项的名称为HikariCP
。通过
<version>
指定依赖项的版本号为3.3.1
。
代码如下:
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency>
添加
logback-classic
依赖库,用于方便地进行日志记录和管理:通过
<groupId>
指定依赖项所属的组织为ch.qos.logback
。通过
<artifactId>
指定依赖项的名称为logback-classic
。通过
<version>
指定依赖项的版本号为1.2.5
。
代码如下:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.5</version> </dependency>
db.properties 代码介绍
db.properties
是本文示例的连接池配置文件,其中包含了连接池的配置属性。这些属性包括数据库 URL、用户名、密码、连接池其他可选项。
本文db.properties
文件的代码主要包括以下几个部分:
配置数据库连接参数。
配置数据库连接的 URL,包括主机 IP、端口号、需要访问的数据库。
配置数据库用户名。
配置数据库密码。
代码如下:
jdbcUrl=jdbc:mysql://$host:$port/$database_name?useSSL=false username=$user_name password=$password
参数解释:
$host
:OceanBase 数据库连接的域名。$port
:OceanBase 数据库连接端口,MySQL 模式租户默认是 3306。$database_name
:需要访问的数据库名称。$user_name
:租户的连接账号。$password
:提供账户密码。
配置其他连接池的参数。
启用预编译 SQL 语句的缓存。
设置预编译 SQL 语句的缓存大小为 250。
设置连接的最大生命周期为 1800000 毫秒(30 分钟),超过这个时间连接将被关闭。
设置连接的空闲超时时间为 600000 毫秒(10 分钟),超过这个时间且连接处于空闲状态时,连接将被关闭。
设置连接的超时时间为 30000 毫秒(30 秒),超过这个时间仍未获得连接时,将抛出异常。
代码如下:
dataSource.cachePrepStmts=true dataSource.prepStmtCacheSize=250 dataSource.maxLifetime=1800000 dataSource.idleTimeout=600000 dataSource.connectionTimeout=30000
具体的属性(参数)配置取决于项目需求和数据库的特点,建议您根据实际情况进行调整和配置。更多 HikariCP 连接池参数的信息,请参见 Configuration。
HikariCP 连接池常用基本参数:
分类 | 参数 | 缺省值 | 描述 |
必选参数 | dataSourceClassName | N/A | 用于指定 JDBC 驱动程序提供的 DataSource 类的名称。 重要
|
jdbcUrl | N/A | 用于指定 JDBC 连接数据库的 URL。 | |
username | N/A | 用于指定连接数据库时使用的用户名。 | |
password | N/A | 指定连接数据库时使用的密码。 | |
常用可选参数 | autoCommit | true | 用于控制连接池返回的连接的默认自动提交行为。 |
connectionTimeout | 30000 | 用于控制客户端从连接池获取连接时的最大等待时间。单位为毫秒,默认值是 30000(30 秒)。最低可接受的连接超时时间是 250 毫秒。 | |
idleTimeout | 600000 | 用于控制连接在池中空闲的最大时间。单位为毫秒,默认值是 600000(10 分钟)。该设置有如下限制:
| |
keepaliveTime | 0 | 用于控制连接保活的频率,以防止连接被数据库或网络基础设施超时。单位为毫秒,默认值是 0,表示禁用连接保活。该值必须小于 | |
maxLifetime | 1800000 | 用于控制连接在连接池中的最大生命周期。已经被使用的连接不会被自动回收,只有当连接被关闭时,才会从连接池中移除。单位为毫秒,默认值是 1800000(30 分钟)。如果将 | |
connectionTestQuery | N/A | 用于执行连接池向数据库发送的连接测试查询。它在从连接池中获取连接之前执行,以验证与数据库的连接是否仍然有效。 | |
minimumIdle | N/A | 用于控制连接池中保持的最小空闲连接数量。如果空闲连接数低于这个值,并且连接池中的总连接数少于 | |
maximumPoolSize | 10 | 用于控制连接池允许的最大大小,包括空闲和正在使用的连接。这个值决定了与数据库后端的实际连接数的最大数量。 | |
poolName | N/A | 用于表示用户定义的连接池名称。在日志记录和 JMX 管理控制台中,这个名称主要用于识别连接池和连接池配置。默认情况下,它会被自动生成一个名称。 |
Main.java 代码介绍
Main.java
文件是示例程序的一部分,用于演示通过 HikariCP 连接池获取数据库连接,并执行一系列数据库操作,包括创建表、插入数据、删除数据、更新数据、查询数据,并将查询结果打印出来。
本文Main.java
文件的代码主要包括以下几个部分:
导入所需的类和包。
定义当前 Java 文件的包名为
com.example
,用于组织和管理 Java 类。导入
java.sql.Connection
类,用于建立和管理与数据库的连接。导入
java.sql.PreparedStatement
类,用于执行预编译的 SQL 语句。导入
java.sql.ResultSet
类,用于处理查询结果集。导入
java.sql.SQLException
类,用于处理 SQL 异常。导入 HikariCP 的
HikariConfig
类,用于配置 HikariCP 连接池。导入 HikariCP 的
HikariDataSource
类,用于创建和管理 HikariCP 连接池。
代码如下:
package com.example; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource;
定义类名和方法。
定义一个 Main 类,其中的
main
方法作为程序的入口。在main
方法中,通过读取db.properties
文件来配置 HikariCP 连接池,并获取数据库连接。然后依次调用了一系列的方法来创建表、插入数据、查询数据、更新数据和删除数据。如果在操作过程中发生SQLException
异常,则会打印异常信息的堆栈跟踪。具体步骤如下:定义一个名为 Main 的公共类。
定义 Main 类的入口方法
main
。创建一个 HikariConfig 对象,并通过指定的
db.properties
文件进行配置。创建一个 HikariDataSource 对象,并在
try-with-resources
块中获取一个数据库连接。调用用于创建表的方法,传递了获取的数据库连接对象,创建表
test_hikaricp
。调用用于插入数据的方法,传递了获取的数据库连接对象和数据参数,插入
(1,'A1')
和(2,'A2')
两行数据。调用用于查询数据的方法,传递了获取的数据库连接对象,查看数据插入情况。
调用用于更新数据的方法,传递了获取的数据库连接对象和更新参数,将
id
为1
的行中name
列的值更新为test_update
。调用用于查询数据的方法,传递了获取的数据库连接对象,查看更新数据情况。
调用了一个用于删除数据的方法,传递了获取的数据库连接对象和删除参数,将
id
为2
的行删除。调用了一个用于查询数据的方法,传递了获取的数据库连接对象,查看删除数据情况。
如果在
try
块中发生了SQLException
异常,将打印异常的堆栈跟踪信息。定义用于创建表、插入数据、查询数据、更新数据和删除数据的方法。
代码如下:
public class Main { public static void main(String[] args) { try { HikariConfig config = new HikariConfig("/db.properties"); try (HikariDataSource dataSource = new HikariDataSource(config); Connection conn = dataSource.getConnection()) { createTable(conn); insertData(conn, 1, "A1"); insertData(conn, 2, "A2"); selectData(conn); updateData(conn, "test_update", 1); selectData(conn); deleteData(conn, 2); selectData(conn); } } catch (SQLException e) { e.printStackTrace(); } } // 定义用于创建表的方法 // 定义用于插入数据的方法 // 定义用于查询数据的方法 // 定义用于更新数据的方法 // 定义用于删除数据的方法 }
定义用于创建表的方法。
定义一个私有静态方法
createTable
,用于在数据库中创建一个名为test_hikaricp
的表,该表包含id
列和name
列。具体步骤如下:定义一个私有静态方法
createTable
,该方法接受一个 Connection 对象作为参数,并声明可能抛出SQLException
异常。定义一个 SQL 语句字符串,用于创建名为
test_hikaricp
的表,表包含id
列(数据类型为INT
)和name
列(数据类型为VARCHAR(50)
)。使用连接对象
conn
创建一个预编译的 SQL 语句对象pstmt
,并在try-with-resources
块中使用该对象。执行 SQL 语句,创建名为
test_hikaricp
的表。在控制台输出打印消息,表示表创建成功。
代码如下:
private static void createTable(Connection conn) throws SQLException { String sql = "CREATE TABLE IF NOT EXISTS test_hikaricp (id INT, name VARCHAR(50))"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.executeUpdate(); System.out.println("Table created successfully."); } }
定义用于插入数据的方法。
定义一个私有静态方法
insertData
,用于向数据库中的表test_hikaricp
插入数据。具体步骤如下:定义一个私有静态方法
insertData
,该方法接受一个 Connection 对象、一个整数类型的id
参数和一个字符串类型的name
参数,并声明可能抛出SQLException
异常。定义一个 SQL 语句字符串,用于向名为
test_hikaricp
的表中插入数据,数据包括id
和name
列。使用连接对象
conn
创建一个预编译的 SQL 语句对象pstmt
,并在try-with-resources
块中使用该对象。设置 SQL 语句中第一个参数
?
的值为id
。设置 SQL 语句中第二个参数
?
的值为name
。执行 SQL 语句,向表中插入数据。
在控制台输出打印消息,表示数据插入成功。
代码如下:
private static void insertData(Connection conn, int id, String name) throws SQLException { String sql = "INSERT INTO test_hikaricp (id, name) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.setString(2, name); pstmt.executeUpdate(); System.out.println("Data inserted successfully."); } }
定义用于查询数据的方法。
定义一个私有静态方法
selectData
,用于从数据库中查询表test_hikaricp
的数据。具体步骤如下:定义一个私有静态方法
selectData
,该方法接受一个 Connection 对象作为参数,并声明可能抛出SQLException
异常。定义一个 SQL 语句字符串,用于查询名为
test_hikaricp
的表中的所有数据。使用连接对象
conn
创建一个预编译的 SQL 语句对象pstmt
,并在try-with-resources
块中使用该对象。同时,通过调用executeQuery()
方法执行 SQL 查询,并返回查询结果集对象rs
。在控制台输出打印消息,表示正在打印用户数据。
遍历查询结果集,使用
next()
方法检查结果集中是否还有下一行数据,如果有,则进入循环。从结果集中获取
id
列的值,并将其赋给变量id
。从结果集中获取
name
列的值,并将其赋给变量name
。在控制台输出打印每行数据的
id
和name
值。在控制台输出一个空行。
代码如下:
private static void selectData(Connection conn) throws SQLException { String sql = "SELECT * FROM test_hikaricp"; try (PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) { System.out.println("User Data:"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } System.out.println(); } }
定义用于更新数据的方法。
定义一个私有静态方法
updateData
,用于更新数据库中表test_hikaricp
中的数据。具体步骤如下:定义一个私有静态方法
updateData
,该方法接受一个 Connection 对象、一个字符串类型的name
参数和一个整数类型的id
参数,并声明可能抛出SQLException
异常。定义一个 SQL 语句字符串,用于更新名为
test_hikaricp
的表中的数据,将name
列的值更新为指定的name
,条件是id
列的值等于指定的id
。使用连接对象
conn
创建一个预编译的 SQL 语句对象pstmt
,并在try-with-resources
块中使用该对象。设置 SQL 语句中第一个参数
?
的值为name
。设置 SQL 语句中第二个参数
?
的值为id
。执行 SQL 语句,更新表中的数据。
在控制台输出打印消息,表示数据更新成功。
代码如下:
private static void updateData(Connection conn, String name, int id) throws SQLException { String sql = "UPDATE test_hikaricp SET name = ? WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, name); pstmt.setInt(2, id); pstmt.executeUpdate(); System.out.println("Data updated successfully."); } }
定义用于删除数据的方法。
定义一个私有静态方法
deleteData
,用于从数据库中删除表test_hikaricp
中满足条件的数据。具体步骤如下:定义一个私有静态方法
deleteData
,该方法接受一个 Connection 对象和一个整数类型的id
参数,并声明可能抛出SQLException
异常。定义一个 SQL 语句字符串,用于从名为
test_hikaricp
的表中删除满足条件id = ?
的数据。使用连接对象
conn
创建一个预编译的 SQL 语句对象pstmt
,并在try-with-resources
块中使用该对象。设置 SQL 语句中第一个参数
?
的值为id
。执行 SQL 语句,从表中删除满足条件的数据。
在控制台输出打印消息,表示数据删除成功。
代码如下:
private static void deleteData(Connection conn, int id) throws SQLException { String sql = "DELETE FROM test_hikaricp WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.executeUpdate(); System.out.println("Data deleted successfully."); } }
完整的代码展示
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.oceanbase</groupId>
<artifactId>hikaricp-mysql-client</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.5</version>
</dependency>
</dependencies>
</project>
db.properties
jdbcUrl=jdbc:mysql://$host:$port/$database_name?useSSL=false
username=$user_name
password=$password
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.maxLifetime=1800000
dataSource.idleTimeout=600000
dataSource.connectionTimeout=30000
Main.java
package com.example;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class Main {
public static void main(String[] args) {
try {
HikariConfig config = new HikariConfig("/db.properties");
try (HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection()) {
createTable(conn);
insertData(conn, 1, "A1");
insertData(conn, 2, "A2");
selectData(conn);
updateData(conn, "test_update", 1);
selectData(conn);
deleteData(conn, 2);
selectData(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void createTable(Connection conn) throws SQLException {
String sql = "CREATE TABLE IF NOT EXISTS test_hikaricp (id INT, name VARCHAR(50))";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.executeUpdate();
System.out.println("Table created successfully.");
}
}
private static void insertData(Connection conn, int id, String name) throws SQLException {
String sql = "INSERT INTO test_hikaricp (id, name) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.setString(2, name);
pstmt.executeUpdate();
System.out.println("Data inserted successfully.");
}
}
private static void selectData(Connection conn) throws SQLException {
String sql = "SELECT * FROM test_hikaricp";
try (PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
System.out.println("User Data:");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
System.out.println();
}
}
private static void updateData(Connection conn, String name, int id) throws SQLException {
String sql = "UPDATE test_hikaricp SET name = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setInt(2, id);
pstmt.executeUpdate();
System.out.println("Data updated successfully.");
}
}
private static void deleteData(Connection conn, int id) throws SQLException {
String sql = "DELETE FROM test_hikaricp WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
System.out.println("Data deleted successfully.");
}
}
}
相关文档
更多 MySQL Connector/J 的信息,请参见 Overview of MySQL Connector/J。
更多使用 HikariCP 连接池的信息,请参见 HikariCP。