This topic introduces how to build an application by using a c3p0 connection pool, OceanBase Connector/J, and OceanBase Database. It also covers the use of the application for fundamental database operations, including table creation, data insertion, data deletion, data updating, and data query.
Prerequisites
You have installed OceanBase Database and created an Oracle tenant.
You have installed Java Development Kit (JDK) 1.8 and Maven.
You have installed Eclipse.
Note
The tool used to run the sample code in this topic is Eclipse IDE for Java Developers (2022-03), but you can also choose a tool that suits your personal preference to run the code.
Procedure
Note
The steps outlined in this topic are for the Windows environment. If you are using a different operating system or compiler, the steps may vary slightly.
- Import the
c3p0-oceanbase-jdbcproject into Eclipse. - Obtain the URL of OceanBase Database.
- Modify the database connection information in the
c3p0-oceanbase-jdbcproject. - Run the
c3p0-oceanbase-jdbcproject.
Step 1: Import the c3p0-oceanbase-jdbc project into Eclipse
Start Eclipse and choose File > Open Projects from File System.
In the dialog box that appears, click Directory to browse and select the project, and then click Finish.
Note
When you import a Maven project using Eclipse, it will automatically detect the
pom.xmlfile in the project, download the required dependency libraries based on the described dependencies in the file, and add them to the project.
View the project.

Step 2: Obtain the URL of OceanBase Database
Contact the deployment personnel or administrator of OceanBase Database to obtain the connection string.
Here is an example:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@oracel001 -p******For more information about the connection string, see Connect to an OceanBase tenant by using OBClient.
Fill in the URL below based on the OceanBase Database connection string.
jdbc:oceanbase://$host:$port/$schema_name?user=$user_name&password=$passwordwhere
$hostspecifies the IP address for connecting to OceanBase Database. For connection through OceanBase Database Proxy (ODP), this parameter is the IP address of an ODP. For direct connection, this parameter is the IP address of an OBServer node.$portspecifies the port for connecting to OceanBase Database. For connection through ODP, the default value is2883, which can be customized when ODP is deployed. For direct connection, the default value is2881, which can be customized when OceanBase Database is deployed.$schema_namespecifies the name of the schema to be accessed.Notice
The user used to connect to the tenant must have the
CREATE SESSIONprivilege and theCREATE TABLE,INSERT,DELETE,UPDATE, andSELECTprivileges on this schema. For more information about user privileges, see Privilege types in Oracle mode.$user_namespecifies the tenant account. For connection through ODP, the tenant account can be in theusername@tenant name#cluster nameorcluster name:tenant name:usernameformat. For direct connection, the tenant account is in theusername@tenant nameformat.$passwordspecifies the password of the account.
For more information about URL parameters in OceanBase Connector/J, see Database URL.
Here is an example:
jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test_schema001?user=test_user001@oracel001&password=******
Step 3: Modify the database connection information in the c3p0-oceanbase-jdbc project
Modify the database connection information in the c3p0-oceanbase-jdbc/src/main/resources/c3p0-config.xml file based on the information obtained in Step 2.
Here is an example:
- The IP address of the OBServer node is
xxx.xxx.xxx.xxx. - The port is
2881. - The name of the schema to be accessed is
test_schema001. - The tenant account is
test_user001@oracle001, whereoracle001is an Oracle user tenant created in OceanBase Database, andtest_user001is the username of theoracle001tenant. - The password is
******.
The sample code is as follows:
...
<property name="jdbcUrl">jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test_schema001?useSSL=false&useUnicode=true&characterEncoding=utf8</property>
<property name="user">test_user001@oracle001</property>
<property name="password">******</property>
...
Step 4: Run the c3p0-oceanbase-jdbc project
In the project navigation view, locate and expand the src/main/java directory.
Right-click the Main.java file and choose Run As > Java Application.

In the console window of Eclipse, view the project logs and output results.

You can also execute the following SQL statement in OceanBase Client (OBClient) to view the results:
obclient [SYS]> SELECT * FROM test_schema001.test_c3p0;The return result is as follows:
+------+--------------+ | ID | NAME | +------+--------------+ | 5 | test_update | | 6 | test_insert6 | | 7 | test_insert7 | | 8 | test_insert8 | | 9 | test_insert9 | +------+--------------+ 5 rows in set
Project code introduction
Click c3p0-oceanbase-jdbc to download the project code, which is a compressed file named c3p0-oceanbase-jdbc.zip.
After decompressing it, you will find a folder named c3p0-oceanbase-jdbc. The directory structure is as follows:
c3p0-oceanbase-jdbc
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Main.java
│ └── resources
│ └── c3p0-config.xml
└── pom.xml
Here is a breakdown of the files and directories:
src: the root directory for storing the source code.main: the directory for storing the main code, including the major logic of the application.java: the directory for storing the Java source code.com: the directory for storing the Java package.example: the directory for storing the packages of the sample project.Main.java: the main class that contains logic such as table creation and data insertion.resources: the directory for storing resource files, including configuration files.c3p0-config.xml: the configuration file of the c3p0 connection pool.pom.xml: the configuration file of the Maven project, which is used to manage project dependencies and build settings.
Code in the pom.xml file
The pom.xml file is a configuration file for Maven projects, which defines the dependencies, plug-ins, and build rules of the projects. Maven is a Java project management tool that can automatically download dependencies, compile, and package the projects.
To configure the pom.xml file, perform the following steps:
Declare the file.
Declare the file to be an XML file that uses XML standard
1.0and character encodingUTF-8.The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?>Configure the namespaces and the POM model version.
xmlns: the default XML namespace, which is set tohttp://maven.apache.org/POM/4.0.0.xmlns:xsi: the namespace for XML elements prefixed withxsi, which is set tohttp://www.w3.org/2001/XMLSchema-instance.xsi:schemaLocation: the mapping between the XML namespace and its corresponding XML schema definition (XSD) file. The value typically consists of paired strings separated by spaces. Each pair consists of a default XML namespace (http://maven.apache.org/POM/4.0.0) in the first part, and the URI of the corresponding XSD file (http://maven.apache.org/xsd/maven-4.0.0.xsd) in the second part.<modelVersion>: the POM model version used by the POM file, which is set to4.0.0.
The sample code is as follows:
<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> <! -- Other configurations --> </project>Configure basic information.
<groupId>: the ID of the group to which the project belongs, which is set tocom.example.<artifactId>: the name of the project, which is set totestc3p0.<version>: the project version, which is set to1.0-SNAPSHOT.
The sample code is as follows:
<groupId>com.example</groupId> <artifactId>testc3p0</artifactId> <version>1.0-SNAPSHOT</version>Configure the properties of the project's source file.
Specify the Maven compiler plug-in as
maven-compiler-plugin, and set both the source code and target Java versions to 8. This means that the project's source code is written using Java 8, and the compiled bytecode will also be compatible with the Java 8 runtime environment. This setup ensures that the project can correctly handle the syntax and features of Java 8 during compilation and runtime.Note
Java 1.8 and Java 8 are different names for the same version.
The sample code is as follows:
<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>Configure the components on which the project depends.
Note
The following code defines that the project depends on OceanBase Connector/J V2.4.2. For more information about other versions, see OceanBase Connector/J.
Define the components on which the project depends by using
<dependency>.oceanbase-client dependency:
<groupId>: the ID of the group to which the dependency belongs, which is set tocom.oceanbase.<artifactId>: the name of the dependency, which is set tooceanbase-client.<version>: the version of the dependency, which is set to2.4.2.
c3p0 dependency:
<groupId>: the ID of the group to which the dependency belongs, which is set tocom.mchange.<artifactId>: the name of the dependency, which is set toc3p0.<version>: the version of the dependency, which is set to0.9.5.5.
The sample code is as follows:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> </dependencies>
Code in the c3p0-config.xml file
c3p0-config.xml is the configuration file of the c3p0 connection pool and is used to configure database connection properties. You can specify values of the <property> elements to configure properties such as the database driver, connection URL, username, password, and connection pool size.
To configure the c3p0-config.xml file, perform the following steps:
Declare the file.
Declare the file to be an XML file that uses XML standard
1.0and character encodingUTF-8.The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?>Configure basic information.
<c3p0-config>: the configuration information of the c3p0 connection pool.<named-config name="oceanbase">: a configuration namedoceanbase. In the code, the name can be used to reference this configuration and obtain connection information and connection pool properties related to the database namedoceanbase.
The sample code is as follows:
<c3p0-config> <named-config name="oceanbase"> // Specify values of the <property> elements. </named-config> </c3p0-config>Configure the database driver.
Set the class name of the Java Database Connectivity (JDBC) driver used to connect to OceanBase Database to
com.oceanbase.jdbc.Driverby using<property>.The sample code is as follows:
<property name="driverClass">com.oceanbase.jdbc.Driver</property>Configure the database connection information.
- Specify the URL for connecting to the database, including the host IP address, port number, schema to be accessed, and other parameters.
- Specify the username for connecting to the database.
- Specify the password for connecting to the database.
The sample code is as follows:
<property name="jdbcUrl">jdbc:oceanbase://$host:$port/$schema_name?useSSL=false&useUnicode=true&characterEncoding=utf8</property> <property name="user">$user_name</property> <property name="password">$password</property>where
$hostspecifies the IP address for connecting to OceanBase Database. For connection through OceanBase Database Proxy (ODP), this parameter is the IP address of an ODP. For direct connection, this parameter is the IP address of an OBServer node.$portspecifies the port for connecting to OceanBase Database. For connection through ODP, the default value is2883, which can be customized when ODP is deployed. For direct connection, the default value is2881, which can be customized when OceanBase Database is deployed.$schema_namespecifies the name of the schema to be accessed.More parameters are described as follows:
useSSL=false: specifies to disable Secure Sockets Layer (SSL) encryption and not to use SSL for data protection during transmission.seUnicode=true: specifies to use the Unicode character set to ensure that various character sets can be correctly processed.characterEncoding=utf8: specifies to use the UTF-8 encoding format.&: an XML entity reference, which indicates the&character. In XML,&is a special character and must be represented as an entity reference to avoid conflicting with the XML syntax.
For more information about URL parameters, see Database URL.
$user_namespecifies the tenant account. For connection through ODP, the tenant account can be in theusername@tenant name#cluster nameorcluster name:tenant name:usernameformat. For direct connection, the tenant account is in theusername@tenant nameformat.$passwordspecifies the password of the account.
Configure other parameters of the c3p0 connection pool.
- Configure the connection pool to increase the number of connections by 20 at a time when needed. This means that when there are insufficient connections in the pool, 20 connections will be added each time.
- Set the initial size of the connection pool to 10. This means that 10 connections are created when the connection pool is started.
- Set the minimum number of connections in the connection pool to 5. This means that the connection pool must have at least five connections.
- Set the maximum number of connections in the connection pool to 30. This means that the connection pool allows at most 30 connections.
- Set the maximum number of cached statements in each connection to 0. This means that no statement is cached.
- Set the maximum number of statements cached for each connection in the connection pool to 0. This means that no statement is cached for connections.
- Set the number of auxiliary threads for c3p0 to 3. These auxiliary threads are used to execute slow JDBC operations.
- Set the interval for checking c3p0 connection properties to 3 seconds. This means that connection properties are checked every 3 seconds.
- Set the timeout value for requesting a connection to 1,000 ms. If a connection fails to be obtained within 1,000 ms, a timeout exception is thrown.
- Set the interval for checking idle connections in the connection pool to 3 seconds. The status of idle connections is checked every 3 seconds.
- Set the maximum idle duration of connections in the connection pool to 10 seconds. A connection that is not used within 10 seconds will be closed.
- Set the maximum idle time for connections exceeding the maximum connection limit in the connection pool to 5 seconds. That is, if a connection exceeds the maximum connection limit and remains idle for more than 5 seconds, it will be closed.
- Set the retry interval for requesting a connection to 1,000 ms. That is, when a connection failed to be obtained, a retry is performed after 1,000 ms.
- Set the name of the table for automatic testing of the c3p0 connection pool to
test. This is a special table used to test whether a connection is valid. - Specify whether to verify a connection when it is returned to the connection pool. If you set the value to
true, a connection is verified when it is returned to the connection pool.
The sample code is as follows:
<property name="acquireIncrement">20</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">30</property> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">0</property> <property name="numHelperThreads">3</property> <property name="propertyCycle">3</property> <property name="checkoutTimeout">1000</property> <property name="idleConnectionTestPeriod">3</property> <property name="maxIdleTime">10</property> <property name="maxIdleTimeExcessConnections">5</property> <property name="acquireRetryDelay">1000</property> <property name="automaticTestTable">test</property> <property name="testConnectionOnCheckin">true</property>
Notice
The actual parameter configurations depend on the project requirements and database characteristics. We recommend that you adjust and configure the parameters based on the actual situation. For more information about c3p0 parameters, see c3p0.
The following table describes the basic parameters of the c3p0 connection pool.
| Category | Parameter | Default value | Description |
|---|---|---|---|
| Required parameters | driverClass | N/A | The class name of the database driver. |
| jdbcUrl | N/A | The URL for connecting to the database. | |
| user | N/A | The username for connecting to the database. | |
| password | N/A | The password for connecting to the database. | |
| Basic settings | acquireIncrement | 3 | The number of connections obtained at a time from the connection pool when needed. For example, if acquireIncrement is set to 20 but the connection pool has only five idle connections, 20 new connections will be created in the connection pool to meet the requirements. |
| acquireRetryAttempts | 30 | The number of retry attempts that c3p0 can obtain a new connection from the connection pool. If you specify a value smaller than or equal to 0, c3p0 will keep trying until a connection is obtained. |
|
| maxIdleTime | 0 | The maximum idle duration for connections in the connection pool. The value 0 indicates that idle connections will never expire. For example, when maxIdleTime is set to 10 seconds, an idle connection will be closed and removed from the connection pool if it is not used within 10 seconds. When the application requests for a connection next time, a new connection will be created in the connection pool. |
|
| maxPoolSize | 15 | The maximum number of connections in the connection pool. When the number of connections in the connection pool reaches the value of maxPoolSize, requests for new connections will be blocked until a connection is released and returned to the connection pool. |
|
| MinPoolSize | 3 | The minimum number of connections in the connection pool. The connection pool retains at least the number of connections specified by minPoolSize. |
|
| initialPoolSize | 3 | The number of connections created when the connection pool is started. The value ranges from minPoolSiz to maxPoolSize. When the connection pool is initialized, connections are created based on the number specified by initialPoolSize. |
|
| Optional parameters | acquireRetryDelay | 1000 | The retry delay for requesting a connection, in ms. When the application requests a connection from the connection pool, the operation fails if no connection is available. In this case, the application will retry with a delay based on the value of acquireRetryDelay. |
| autoCommitOnClose | false | Specifies whether to automatically commit the transaction when a connection is closed. The default value is false, which specifies not to automatically commit the transaction when a connection is closed. If the application needs to explicitly commit the transaction before the connection is closed, you can set autoCommitOnClose to true.
NoticeAuto-commit can result in data inconsistency or loss. Therefore, we recommend that you exercise caution and make sure that transactions are complete if you want to use |
|
| automaticTestTable | null | The name of the table for automatic testing of the connection pool. c3p0 will create an empty table with the specified name and query this table to verify connections. The default value is null, which means that no test statement is executed. For example, if you set automaticTestTable to test, c3p0 will create an empty table named test and use the inherent query statement to test connections.
NoteIf both |
|
| idleConnectionTestPeriod | 0 | The interval for the connection pool to verify idle connections, in ms. The connection pool verifies idle connections at the specified interval. The default value is 0, which specifies not to verify idle connections. |
|
| maxStatements | 0 | The maximum number of prepared statements allowed in the connection pool.
Note
|
|
| maxStatementsPerConnection | 0 | The maximum number of prepared statements allowed in each connection.
Note
|
|
| numHelperThreads | 3 | The number of auxiliary threads for asynchronous tasks.
Note
|
|
| preferredTestQuery | null | The test statement executed for all connection verifications. Defining a statement that will quickly execute in your database can significantly speed up the verification.
NoticeThe test table must already exist when the data source is initialized. |
|
| checkoutTimeout | 0 | The timeout value for requesting a connection from the connection pool, in ms. The default value is 0, which indicates that the request does not time out. When the client calls getConnection(), an SQLException is thrown if no connection is obtained when the specified period expires. |
|
| Unrecommended parameters | breakAfterAcquireFailure | false | Specifies whether to interrupt the operation when a connection fails to be obtained from the connection pool. If a connection failed to be obtained from the connection pool, all threads waiting for a connection from the connection pool will throw an exception. However, the data source is still valid and retained. When getConnection() is called again, the threads continue to try to obtain a connection.
|
| testConnectionOnCheckout | false | Specifies whether to verify a connection when it is obtained from the connection pool.
NoteConnection verification ensures the validity of connections but results in considerable extra overheads. Therefore, you must determine whether to enable connection verification based on the application requirements and performance requirements. If the application demands high connection availability, you can enable connection verification. If connections in the connection pool are frequently requested and released, frequent connection verification will compromise the performance. |
|
| testConnectionOnCheckin | false | Specifies whether to verify a connection when it is returned to the connection pool.
NoteConnection verification ensures the validity of connections but results in considerable extra overheads. Therefore, you must determine whether to enable connection verification based on the application requirements and performance requirements. If the application demands high connection availability, you can enable connection verification. If connections in the connection pool are frequently requested and returned, frequent connection verification will compromise the performance. |
Code in the Main.java file
The Main.java file is a part of the sample application, demonstrating how to obtain a database connection through the c3p0 connection pool and perform a series of database operations within a transaction. These operations include creating a table, inserting data, deleting data, updating data, querying data, and printing the query results. This showcases how to use the c3p0 connection pool to manage database connections and execute transactional operations, ultimately improving the efficiency and performance of database operations.
To configure the Main.java file, perform the following steps:
Define the package and import
java.sqlinterfaces and classes.- Declare the name of the package to which the current code belongs as
com.example. - Import the
java.sql.Connectionclass for representing database connections. - Import the
java.sql.PreparedStatementclass for executing precompiled database operations. - Import the
java.sql.ResultSetclass for representing the result sets of database queries. - Import the
com.mchange.v2.c3p0.ComboPooledDataSourceclass for using the c3p0 connection pool.
The sample code is as follows:
package com.example; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.mchange.v2.c3p0.ComboPooledDataSource;- Declare the name of the package to which the current code belongs as
Define class names and methods.
- Define a
Mainpublic class, which is used as the entry to the application. The class name must be the same as the file name. - Define a public static method named
main, which is used as the execution start point of the application. - Use the
try-with-resourcesblock to obtain a database connection and create a precompiled SQL statement. - Perform transaction operations.
- Capture possible exceptions and record stack information of the exceptions.
- Define a private static method
getConnectionfor requesting database connections from the c3p0 connection pool. Create aComboPooledDataSourceobject namedcpdsin the method. This object specifies the connection pool configurations by using theoceanbaseparameter. Call thecpds.getConnection()method to request a database connection from the connection pool and return the connection.
The sample code is as follows:
public class Main { public static void main(String[] args) { try ( // Obtain a database connection. // Create a precompiled SQL statement. ) { // Perform database transaction operations. Specifically, you can start a transaction, create a table, insert data, delete data, update data, query data, and commit a transaction. } catch (Exception e) { e.printStackTrace(); } } private static Connection getConnection() throws Exception { ComboPooledDataSource cpds = new ComboPooledDataSource("oceanbase"); return cpds.getConnection(); } }- Define a
Obtain a database connection.
Obtain a database connection and assign it to the
connvariable.The sample code is as follows:
Connection conn = getConnection();Create precompiled SQL statements.
- Create a precompiled SQL statement for creating a database table named
test_c3p0. - Create a precompiled SQL statement for inserting data into the
test_c3p0table. - Create a precompiled SQL statement for deleting data from the
test_c3p0table. - Create a precompiled SQL statement for updating data in the
test_c3p0table. - Create a precompiled SQL statement for querying data from the
test_c3p0table.
The sample code is as follows:
PreparedStatement stmtCreate = conn.prepareStatement("CREATE TABLE test_c3p0 (id NUMBER, name VARCHAR2(32))"); PreparedStatement stmtInsert = conn.prepareStatement("INSERT INTO test_c3p0 VALUES (?, ?)"); PreparedStatement stmtDelete = conn.prepareStatement("DELETE FROM test_c3p0 WHERE id < ?"); PreparedStatement stmtUpdate = conn.prepareStatement("UPDATE test_c3p0 SET name = ? WHERE id = ?"); PreparedStatement stmtSelect = conn.prepareStatement("SELECT * FROM test_c3p0")- Create a precompiled SQL statement for creating a database table named
Start a transaction.
Set
conn.setAutoCommittofalseto start the transaction mechanism.The sample code is as follows:
conn.setAutoCommit(false);Create a table.
Execute the SQL statement for creating a table.
The sample code is as follows:
stmtCreate.execute();Insert data.
Use the
FORloop to insert 10 records into thetest_c3p0table. The values of the first column are the values of theivariable. The values of the second column are the values of thetest_insertstring followed by the values of theivariable.The sample code is as follows:
for (int i = 0; i < 10; i++) { stmtInsert.setInt(1, i); stmtInsert.setString(2, "test_insert" + i); stmtInsert.executeUpdate(); }Delete data.
Set the value of the first parameter in the deletion statement to
5and execute the deletion statement.The sample code is as follows:
stmtDelete.setInt(1, 5); stmtDelete.executeUpdate();Update data.
Set the first parameter to
test_updateand the second parameter to5in the update statement, and execute the update statement.The sample code is as follows:
stmtUpdate.setString(1, "test_update"); stmtUpdate.setInt(2, 5); stmtUpdate.executeUpdate();Query data.
- Execute a query statement and save the query result in the
ResultSetobject namedrs. - Use
rs.next()to check whether the result set contains another row based on aWHILEloop. If yes, execute the code in the loop. - The code in the loop returns the
idandnamecolumn values of each row. - Close the result set and release relevant resources.
The sample code is as follows:
ResultSet rs = stmtSelect.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id") + " " + rs.getString("name")); } rs.close();- Execute a query statement and save the query result in the
Commit the transaction.
The sample code is as follows:
conn.commit();
Complete code
<?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.example</groupId>
<artifactId>testc3p0</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>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config name="oceanbase">
<!-- Configure Database Driver -->
<property name="driverClass">com.oceanbase.jdbc.Driver</property>
<!-- Configure Database Link Address -->
<property name="jdbcUrl">jdbc:oceanbase://$host:$port/$schema_name?useSSL=false&useUnicode=true&characterEncoding=utf8</property>
<!-- Configure database username -->
<property name="user">$user_name</property>
<!-- Configure database password -->
<property name="password">$password</property>
<!-- How many connection objects does the database Connection pool want from the database at one time -->
<property name="acquireIncrement">20</property>
<!-- Initialize connections -->
<property name="initialPoolSize">10</property>
<!-- Minimum number of connections -->
<property name="minPoolSize">5</property>
<!-- The maximum number of connections reserved in the Connection pool. Default: 15 -->
<property name="maxPoolSize">30</property>
<!-- JDBC standard parameter used to control the number of PreparedStatements loaded within the data source. However, the pre cached statements belong to a single connection rather than the entire Connection pool. So setting this parameter requires considering multiple factors. If both maxStatements and maxStatementsPerConnection are 0, the cache is turned off. Default:0 -->
<property name="maxStatements">0</property>
<!-- MaxStatementsPerConnection defines the maximum number of cached statements owned by a single connection in the Connection pool. Default: 0 -->
<property name="maxStatementsPerConnection">0</property>
<!-- C3p0 is an asynchronous operation, and slow JDBC operations are completed by the helper process. Expanding these operations can effectively improve performance by enabling multiple operations to be executed simultaneously through multithreading. Default:3 -->
<property name="numHelperThreads">3</property>
<!-- The user can wait up to 300 seconds before modifying the system configuration parameters. Default: 300 -->
<property name="propertyCycle">3</property>
<!-- The default setting for obtaining the connection timeout is to wait for a unit of milliseconds -->
<property name="checkoutTimeout">1000</property>
<!-- Check all free connections in the Connection pool every few seconds. Default: 0 -->
<property name="idleConnectionTestPeriod">3</property>
<!-- The maximum idle time, within seconds, if not used, the connection will be discarded. If it is 0, it will never be discarded. Default: 0 -->
<property name="maxIdleTime">10</property>
<!-- Configure the lifetime of the connection. Connections beyond this time will be automatically disconnected and discarded by the Connection pool. Of course, the connection being used will not be immediately disconnected, but will wait for it to close before disconnecting. When configured to 0, there is no restriction on the lifetime of the connection. -->
<property name="maxIdleTimeExcessConnections">5</property>
<!-- The interval time between two connections, in milliseconds. Default: 1000 -->
<property name="acquireRetryDelay">1000</property>
<!-- C3p0 will create an empty table called Test and use its built-in query statement for testing. If this parameter is defined, the property preferredTestQuery will be ignored. You cannot perform any operations on this Test table, it will only be used for c3p0 testing. Default: null -->
<property name="automaticTestTable">test</property>
<!-- Test if the connection is valid when obtaining it -->
<property name="testConnectionOnCheckin">true</property>
</named-config>
</c3p0-config>
package com.example;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Main {
public static void main(String[] args) {
try (Connection conn = getConnection();
PreparedStatement stmtCreate = conn.prepareStatement("CREATE TABLE test_c3p0 (id NUMBER, name VARCHAR2(32))");
PreparedStatement stmtInsert = conn.prepareStatement("INSERT INTO test_c3p0 VALUES (?, ?)");
PreparedStatement stmtDelete = conn.prepareStatement("DELETE FROM test_c3p0 WHERE id < ?");
PreparedStatement stmtUpdate = conn.prepareStatement("UPDATE test_c3p0 SET name = ? WHERE id = ?");
PreparedStatement stmtSelect = conn.prepareStatement("SELECT * FROM test_c3p0")) {
conn.setAutoCommit(false);
stmtCreate.execute();
for (int i = 0; i < 10; i++) {
stmtInsert.setInt(1, i);
stmtInsert.setString(2, "test_insert" + i);
stmtInsert.executeUpdate();
}
stmtDelete.setInt(1, 5);
stmtDelete.executeUpdate();
stmtUpdate.setString(1, "test_update");
stmtUpdate.setInt(2, 5);
stmtUpdate.executeUpdate();
ResultSet rs = stmtSelect.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("id") + " " + rs.getString("name"));
}
rs.close();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Connection getConnection() throws Exception {
ComboPooledDataSource cpds = new ComboPooledDataSource("oceanbase");
return cpds.getConnection();
}
}
References
For more information about OceanBase Connector/J, see OceanBase Connector/J.
Download the c3p0-oceanbase-jdbc sample project