This topic describes how to build an application by using a DBCP connection pool, MySQL Connector/J, and OceanBase Database to perform basic database operations, including creating tables, inserting, deleting, updating, and querying data.
Click to download the dbcp-mysql-client sample project Prerequisites
You have installed OceanBase Database and created a MySQL mode tenant.
You have installed JDK 1.8 and Maven.
You have installed Eclipse.
Note
The code examples in this topic are run in Eclipse IDE for Java Developers 2022-03. You can also use your preferred tool to run the code examples.
Procedure
Note
The following steps describe how to compile and run the project in the Windows environment using Eclipse IDE for Java Developers 2022-03. If you are using other operating systems or compilers, the steps may vary slightly.
- Import the
dbcp-mysql-clientproject into Eclipse. - Obtain the URL of OceanBase Database.
- Modify the database connection information in the
dbcp-mysql-clientproject. - Run the
dbcp-mysql-clientproject.
Step 1: Import the dbcp-mysql-client project into Eclipse
Start Eclipse and select File > Open Projects from File System from the menu bar.
In the dialog box that appears, click Directory to browse and select the project's directory, then click Finish.
Note
When you import a Maven project into Eclipse, it automatically detects the
pom.xmlfile in the project, downloads the required dependency libraries based on the described dependencies, and adds them to the project.
View the project status.

Step 2: Obtain the URL of OceanBase Database
Contact the deployment personnel or administrator of OceanBase Database to obtain the corresponding database connection string.
Here is an example:
obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -DtestFor more information about connection strings, see Connect to an OceanBase tenant by using OBClient.
Fill in the corresponding information in the URL based on the OceanBase Database connection string.
jdbc:mysql://$host:$port/$database_name?user=$user_name&password=$passwordParameter description:
$host: the IP address for connecting to OceanBase Database. If you connect through OceanBase Database Proxy (ODP), use the IP address of the ODP. If you connect directly to an OBServer node, use the IP address of the OBServer node.$port: the port for connecting to OceanBase Database. The default port for connecting through ODP is2883, which can be customized during ODP deployment. The default port for direct connection is2881, which can be customized during OceanBase Database deployment.$database_name: the name of the database to be accessed.Notice
The user for connecting to the tenant must have the
CREATE,INSERT,DELETE,UPDATE, andSELECTprivileges on the database. For more information about user privileges, see Privilege types in MySQL mode.$user_name: the tenant connection account. For connecting through ODP, the format isusername@tenant name#cluster nameorcluster name:tenant name:username. For direct connection, the format isusername@tenant name.$password: the account password.
For more information about MySQL Connector/J connection properties, see Configuration Properties.
Here is an example:
jdbc:mysql://xxx.xxx.xxx.xxx:2881/test?user=test_user001@mysql001&password=******
Step 3: Modify the database connection information in the dbcp-mysql-client project
Modify the database connection information in the dbcp-mysql-client/src/main/resources/db.properties file based on the information obtained in Step 2: Obtain the URL of OceanBase Database.
Here is an example:
- The IP address of the OBServer node is
xxx.xxx.xxx.xxx. - The access port is 2881.
- The name of the database to be accessed is
test. - The tenant connection account is
test_user001@mysql001.mysql001is a MySQL tenant created in OceanBase Database, andtest_user001is the username of themysql001tenant. - The password is
******.
Sample code:
...
url=jdbc:mysql://xxx.xxx.xxx.xxx:2881/test
username=test_user001@mysql001
password=******
...
Step 4: Run the dbcp-mysql-client project
In the Project Explorer view, locate and expand the src/main/java directory.
Right-click the Main.java file and select Run As > Java Application.

View the project's log information and output results in the console window of Eclipse.

You can also execute the following SQL statement in OceanBase Client (OBClient) to view the results.
obclient [test]> SELECT * FROM test_tbl1;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
Click dbcp-mysql-client to download the project code, which is a compressed package named dbcp-mysql-client.zip.
After decompressing it, you will find a folder named dbcp-mysql-client. The directory structure is as follows:
dbcp-mysql-client
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Main.java
│ └── resources
│ └── db.properties
└── pom.xml
File description:
src: the root directory of the source code.main: the main code directory, containing the core logic of the application.java: the directory for Java source code.com: the directory for Java packages.example: the directory for packages of the sample project.Main.java: the main class program file, containing logic for creating tables, inserting, deleting, updating, and querying data.resources: the directory for resource files, including configuration files.db.properties: the configuration file for the connection pool, containing parameters related to database connections.pom.xml: the configuration file for the Maven project, used to manage project dependencies and build settings.
Introduction to pom.xml
The pom.xml file is a configuration file for Maven projects, defining project dependencies, plugins, and build rules. Maven is a Java project management tool that can automatically download dependencies, compile, and package projects.
The pom.xml file in this topic includes the following main parts:
File declaration statements.
This declares the file as an XML file using XML version
1.0and character encodingUTF-8.Code:
<?xml version="1.0" encoding="UTF-8"?>Configure the namespace and POM model version.
- Use
xmlnsto set the POM namespace tohttp://maven.apache.org/POM/4.0.0. - Use
xmlns:xsito set the XML namespace tohttp://www.w3.org/2001/XMLSchema-instance. - Use
xsi:schemaLocationto set the POM namespace tohttp://maven.apache.org/POM/4.0.0and the location of the POM XSD file tohttp://maven.apache.org/xsd/maven-4.0.0.xsd. - Use
<modelVersion>to set the POM model version to4.0.0.
Code:
<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>- Use
Configure basic information.
- Use
<groupId>to set the project group tocom.example. - Use
<artifactId>to set the project name todbcp-mysql-client. - Use
<version>to set the project version to1.0-SNAPSHOT.
Code:
<groupId>com.example</groupId> <artifactId>dbcp-mysql-client</artifactId> <version>1.0-SNAPSHOT</version>- Use
Configure project source file properties.
Set the Maven compiler plugin to
maven-compiler-pluginand set both the source code and target Java versions to 8. This means the project's source code is written using Java 8 features, and the compiled bytecode will also be compatible with the Java 8 runtime environment. This configuration ensures that the project can correctly handle Java 8 syntax and features during compilation and runtime.Note
Java 1.8 and Java 8 are different names for the same version.
Code:
<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 that the project depends on.
Use
<dependency>to define dependencies:MySQL JDBC dependency:
- Use
<groupId>to set the dependency group tomysql. - Use
<artifactId>to set the dependency name tomysql-connector-java. - Use
<version>to set the dependency version to5.1.47.
- Use
dbcp dependency:
- Use
<groupId>to set the dependency group toorg.apache.commons. - Use
<artifactId>to set the dependency name tocommons-dbcp2. - Use
<version>to set the dependency version to2.9.0.
- Use
Code:
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.9.0</version> </dependency> </dependencies>
Introduction to the db.properties file
db.properties is the connection pool configuration file used in this example. It contains configuration properties for the connection pool, including the driver class name, database URL, username, password, connection pool size and limits, connection timeout, and options for handling abandoned connections.
The code in the db.properties file in this example mainly includes the following parts:
Configure the database connection parameters.
- Set the driver class name. Here, it is the class name of the MySQL JDBC driver:
com.mysql.jdbc.Driver. - Set the database connection URL, including the host IP address, port number, and the database to be accessed.
- Set the database username.
- Set the database password.
- Set the connection properties.
useSSL=falseindicates that SSL encryption is not used for connections.characterEncoding=UTF-8indicates that data transmission uses UTF-8 encoding.
Sample code:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://$host:$port/$database_name username=$user_name password=$password connectionProperties=useSSL=false;characterEncoding=UTF-8Parameter description:
$host: the IP address for connecting to OceanBase Database. For ODP connection, use an ODP address. For direct connection, use the IP address of an OBServer node.$port: the port for connecting to OceanBase Database. For ODP connection, the default port is2883, which can be customized when ODP is deployed. For direct connection, the default port is2881, which can be customized when OceanBase Database is deployed.$database_name: the name of the database to be accessed.$user_name: the tenant account. For ODP connection, the common format isusername@tenant name#cluster nameorcluster name:tenant name:username. For direct connection, the format isusername@tenant name.$password: the password of the account.
- Set the driver class name. Here, it is the class name of the MySQL JDBC driver:
Configure other DBCP connection pool parameters.
Set the initial size of the connection pool to
30, which is the number of connections to be created initially in the connection pool.Set the maximum number of connections in the connection pool to
30, which is the maximum number of connections allowed in the connection pool.Set the maximum number of idle connections in the connection pool to
10.Set the minimum number of idle connections in the connection pool to
5. If the number of idle connections is less than this value, the connection pool will create new connections.Set the maximum waiting time (in milliseconds) for obtaining a connection from the connection pool to
1000. If all connections in the connection pool are occupied and no available connections are available, the operation to obtain a connection will wait until an available connection is available or the maximum waiting time is exceeded.Set the timeout (in seconds) for abandoned connections before they are removed to
1.Note
The default value of
removeAbandonedTimeoutis 300 seconds. In this example, it is set to 1 second for testing purposes. You can adjust this value as needed to meet the requirements of your application.Whether the connection pool recycles connections that are no longer used in the program:
- Set whether to detect and remove abandoned connections during maintenance to
true. - Set whether to detect and remove abandoned connections when borrowing connections from the connection pool to
true.
- Set whether to detect and remove abandoned connections during maintenance to
Sample code:
initialSize=30 maxTotal=30 maxIdle=10 minIdle=5 maxWaitMillis=1000 removeAbandonedTimeout=1 removeAbandonedOnMaintenance=true removeAbandonedOnBorrow=true
Notice
The specific configuration of parameters depends on the project requirements and the characteristics of the database. We recommend that you adjust and configure the parameters as needed. For more information about DBCP connection pool parameters, see BasicDataSource Configuration Parameters.
Basic data source configuration parameters of DBCP connection pool:
Classification |
Parameter |
Default value |
Description |
|---|---|---|---|
| Mandatory parameters | driverClass | N/A | Specifies the class name of the database driver. |
| url | N/A | Specifies the URL used to connect to the database. | |
| username | N/A | Specifies the username used to connect to the database. | |
| password | N/A | Specifies the password used to connect to the database. | |
| Recommended parameters | initialSize | 0 | Specifies the initial size of the connection pool, which is the number of initial connections created when the pool starts. If you set this parameter to a value greater than 0, the specified number of connections will be created during the initialization of the connection pool. This can help to pre-establish connections and reduce the latency when the client requests a connection for the first time. |
| maxTotal | 8 | Specifies the maximum number of connections allowed in the connection pool. If you set this parameter to a negative value, there is no limit. | |
| maxIdle | 8 | Specifies the maximum number of idle connections allowed in the connection pool without releasing additional connections. If you set this parameter to a negative value, there is no limit. | |
| minIdle | 0 | Specifies the minimum number of idle connections allowed in the connection pool without releasing additional connections. If you set this parameter to a negative value, there is no limit. | |
| maxWaitMillis | indefinitely | Specifies the maximum waiting time (in milliseconds) for obtaining a connection from the connection pool. If you set this parameter to -1, the connection pool will wait indefinitely. If you set this parameter to a positive value, the operation to obtain a connection will wait for the specified time when all connections in the pool are occupied. If the time is exceeded, an exception will be thrown. | |
| validationQuery | N/A | Specifies the SQL query statement used to verify the validity of a connection. If you specify this parameter, the query must be a SQL SELECT statement that returns at least one row. If you do not specify this parameter, the connection will be verified by calling the isValid() method. |
|
| testOnBorrow | true | Specifies whether to verify the connection when borrowing an object from the connection pool. If the object cannot be verified, it will be removed from the connection pool, and another object will be tried to be borrowed. | |
| testWhileIdle | false | Specifies whether to verify the connection when the connection pool is idle. If you set this parameter to true, the connection pool will periodically execute the verification query to check the validity of idle connections. If the object fails the verification, it will be removed from the connection pool. |
|
| Optional parameters | connectionProperties | N/A | Specifies additional connection properties in key-value pairs, which will be passed to the underlying JDBC driver when a database connection is obtained. The string format must be propertyName=property;
NoticeThe |
|
false | These two parameters control the behavior of removing connections that are considered abandoned.
true, the connection pool can automatically detect and remove abandoned connections. Abandoned connections are those that have been unused for a long time, which may be caused by the application not properly closing the connections. Removing these abandoned connections can release database resources and improve the performance and efficiency of the connection pool. |
Main.java code introduction
The Main.java file is part of the sample program, demonstrating how to obtain a database connection through a DBCP connection pool and perform a series of database operations, including table creation, data insertion, data deletion, data update, data query, and printing the query results.
The Main.java file in this article mainly includes the following parts:
Import the required classes and interfaces.
Import the required classes and interfaces, including those for file reading, database operations, and database connection pools. These classes and interfaces will be used in the subsequent code.
- Declare a package named
com.examplefor storing the current Java class. - Import the
java.io.FileInputStreamclass for reading files. - Import the
java.sql.Connectioninterface, representing a connection to the database. - Import the
java.sql.PreparedStatementinterface, representing a precompiled SQL statement. - Import the
java.sql.ResultSetinterface, representing the result set of a database query. - Import the
java.sql.SQLExceptionexception class, representing an SQL operation exception. - Import the
java.util.Propertiesclass for loading configuration files. - Import the
org.apache.commons.dbcp2.BasicDataSourceclass, representing a database connection pool. - Import the
org.apache.commons.dbcp2.BasicDataSourceFactoryclass for creating a database connection pool.
Code:
package com.example; import java.io.FileInputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory;- Declare a package named
Define the class name and method.
- Create the Main class and define a
mainmethod as the entry point of the program. - In the
mainmethod, first call thecreateDataSource()method to create a connection pool objectdataSource. - Use the
try-with-resourcesstatement to automatically close resources when the connection pool object's lifecycle ends. - In the
tryblock, call thegetConnection()method to obtain a database connection objectconnfrom the connection pool. - Sequentially call the
createTable(),insertData(),deleteData(),updateData(), andqueryData()methods to execute the corresponding database operations. - In the event of an exception, print the exception information using the
catchblock.
Code:
public class Main { public static void main(String[] args) { try (BasicDataSource dataSource = createDataSource()) { try (Connection conn = dataSource.getConnection()) { createTable(conn); insertData(conn); deleteData(conn); updateData(conn); queryData(conn); } } catch (Exception e) { e.printStackTrace(); } } // Create a connection pool // Define a method for creating a table // Define a method for inserting data // Define a method for deleting data // Define a method for updating data // Define a method for querying data }- Create the Main class and define a
Create a connection pool.
Provide a convenient method for creating a database connection pool, initializing the connection pool object by reading parameters from the configuration file. The specific steps are as follows:
- Define a private static method
createDataSource()with a return type ofBasicDataSource. The method may throw anExceptionexception. - Create a
Propertiesobjectpropsfor storing database connection configuration information. - Create a
FileInputStreamobjectisfor reading thedb.propertiesfile located in thesrc/main/resourcesdirectory. - Use the
load()method to load the key-value pairs from thedb.propertiesfile into thepropsobject. - Call the
BasicDataSourceFactory.createDataSource(props)method to create and return aBasicDataSourceobject using thepropsobject as the parameter.
Code:
private static BasicDataSource createDataSource() throws Exception { Properties props = new Properties(); FileInputStream is = new FileInputStream("src/main/resources/db.properties"); props.load(is); return BasicDataSourceFactory.createDataSource(props); }- Define a private static method
Define a method for creating a table.
Provide a method for creating a specified table in the database. It accepts a connection object as a parameter and executes the create table SQL statement using a precompiled approach. The specific steps are as follows:
- Define a private static method
createTable()that accepts aConnectionobject as a parameter. The method may throw anSQLExceptionexception. - Define a string variable
createTableSqlfor storing the create table SQL statement. The SQL statement specifies the table name astest_tbl1and defines two columns: one is anINTtype column namedid, and the other is aVARCHAR(32)type column namedname. - Use the
conn.prepareStatement(createTableSql)method to create aPreparedStatementobjectcreateTableStmtfor executing precompiled SQL statements. - Call the
execute()method to execute the SQL statement for creating the table.
Code:
private static void createTable(Connection conn) throws SQLException { String createTableSql = "CREATE TABLE test_tbl1 (id INT, name VARCHAR(32))"; try (PreparedStatement createTableStmt = conn.prepareStatement(createTableSql)) { createTableStmt.execute(); } }- Define a private static method
Define a method for inserting data.
Provide a method for inserting specified data into a table in the database. It accepts a connection object as a parameter and executes the insert data SQL statement using a precompiled approach. The specific steps are as follows:
Define a private static method
insertData()that accepts aConnectionobject as a parameter. The method may throw anSQLExceptionexception.Define a string variable
insertDataSqlfor storing the insert data SQL statement.Use the
conn.prepareStatement(insertDataSql)method to create aPreparedStatementobjectinsertDataStmtfor executing precompiled SQL statements.Use a
forloop to insert data into the table:- Loop
10times, inserting one piece of data in each iteration. - Use the
setInt()method to set the value of the loop variableias the first parameter value in the SQL statement. - Use the
setString()method to set the stringtest_insert + ias the second parameter value in the SQL statement. - Call the
executeUpdate()method to execute the SQL statement for inserting data into the database.
- Loop
Code:
private static void insertData(Connection conn) throws SQLException { String insertDataSql = "INSERT INTO test_tbl1 (id, name) VALUES (?, ?)"; try (PreparedStatement insertDataStmt = conn.prepareStatement(insertDataSql)) { for (int i = 0; i < 10; i++) { insertDataStmt.setInt(1, i); insertDataStmt.setString(2, "test_insert" + i); insertDataStmt.executeUpdate(); } } }Define a method for deleting data.
Provide a method that deletes data from the database based on specific conditions. It accepts a connection object as a parameter and uses a precompiled approach to execute the SQL statement for data deletion. The steps are as follows:
- Define a private static method
deleteData()that accepts aConnectionobject as a parameter and may throw anSQLException. - Define a string variable
deleteDataSqlto store the SQL statement for data deletion. - Use the
conn.prepareStatement(deleteDataSql)method to create aPreparedStatementobjectdeleteDataStmtfor executing the precompiled SQL statement. - Use the
setInt()method to set the value of the parameter in the SQL statement to the number 5. - Call the
executeUpdate()method to execute the SQL statement and delete data that meets the specified conditions from the database.
Code:
private static void deleteData(Connection conn) throws SQLException { String deleteDataSql = "DELETE FROM test_tbl1 WHERE id < ?"; try (PreparedStatement deleteDataStmt = conn.prepareStatement(deleteDataSql)) { deleteDataStmt.setInt(1, 5); deleteDataStmt.executeUpdate(); } }- Define a private static method
Define a method for updating data.
Provide a method that updates data in the database based on specific conditions. It accepts a connection object as a parameter and uses a precompiled approach to execute the SQL statement for data updates. The steps are as follows:
- Define a private static method
updateData()that accepts aConnectionobject as a parameter and may throw anSQLException. - Define a string variable
updateDataSqlto store the SQL statement for data updates. - Use the
conn.prepareStatement(updateDataSql)method to create aPreparedStatementobjectupdateDataStmtfor executing the precompiled SQL statement. - Use the
setString()method to set the value of the first parameter in the SQL statement to the stringtest_update. - Use the
setInt()method to set the value of the second parameter in the SQL statement to the number5. - Call the
executeUpdate()method to execute the SQL statement and update data that meets the specified conditions in the database.
Code:
private static void updateData(Connection conn) throws SQLException { String updateDataSql = "UPDATE test_tbl1 SET name = ? WHERE id = ?"; try (PreparedStatement updateDataStmt = conn.prepareStatement(updateDataSql)) { updateDataStmt.setString(1, "test_update"); updateDataStmt.setInt(2, 5); updateDataStmt.executeUpdate(); } }- Define a private static method
Define a method for querying data.
Provide a method that queries data from the database and processes it. It accepts a connection object as a parameter and uses a precompiled approach to execute the SQL statement for data queries. The steps are as follows:
Define a private static method
queryData()that accepts aConnectionobject as a parameter and may throw anSQLException.Define a string variable
queryDataSqlto store the SQL statement for data queries.Use the
conn.prepareStatement(queryDataSql)method to create aPreparedStatementobjectqueryDataStmtfor executing the precompiled SQL statement.Execute the SQL query using the
queryDataStmt.executeQuery()method and use theResultSetobjectrsto receive the query results.Use a
whileloop to iterate through the query result set by calling thers.next()method:- Use the
getInt()method to retrieve the integer value of the column namedidin the result set and assign it to the variableid. - Use the
getString()method to retrieve the string value of the column namednamein the result set and assign it to the variablename. - Print the
idandnameof the query results.
- Use the
Code:
private static void queryData(Connection conn) throws SQLException { String queryDataSql = "SELECT * FROM test_tbl1"; try (PreparedStatement queryDataStmt = conn.prepareStatement(queryDataSql)) { try (ResultSet rs = queryDataStmt.executeQuery()) { while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("id: " + id + ", name: " + name); } } } }
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>dbcp-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.47</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
# Database Connect Information
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://$host:$port/$database_name
username=$user_name
password=$password
connectionProperties=useSSL=false;characterEncoding=UTF-8
# ConnectionPool Parameters
initialSize=30
maxTotal=30
maxIdle=10
minIdle=5
maxWaitMillis=1000
removeAbandonedTimeout=1
removeAbandonedOnMaintenance=true
removeAbandonedOnBorrow=true
package com.example;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
public class Main {
public static void main(String[] args) {
try (BasicDataSource dataSource = createDataSource()) {
try (Connection conn = dataSource.getConnection()) {
createTable(conn);
insertData(conn);
deleteData(conn);
updateData(conn);
queryData(conn);
}
} catch (Exception e) {
e.printStackTrace();
}
}
// Create ConnectionPool
private static BasicDataSource createDataSource() throws Exception {
Properties props = new Properties();
FileInputStream is = new FileInputStream("src/main/resources/db.properties");
props.load(is);
return BasicDataSourceFactory.createDataSource(props);
}
// Create table
private static void createTable(Connection conn) throws SQLException {
String createTableSql = "CREATE TABLE test_tbl1 (id INT, name VARCHAR(32))";
try (PreparedStatement createTableStmt = conn.prepareStatement(createTableSql)) {
createTableStmt.execute();
}
}
// Insert data
private static void insertData(Connection conn) throws SQLException {
String insertDataSql = "INSERT INTO test_tbl1 (id, name) VALUES (?, ?)";
try (PreparedStatement insertDataStmt = conn.prepareStatement(insertDataSql)) {
for (int i = 0; i < 10; i++) {
insertDataStmt.setInt(1, i);
insertDataStmt.setString(2, "test_insert" + i);
insertDataStmt.executeUpdate();
}
}
}
// Delete data
private static void deleteData(Connection conn) throws SQLException {
String deleteDataSql = "DELETE FROM test_tbl1 WHERE id < ?";
try (PreparedStatement deleteDataStmt = conn.prepareStatement(deleteDataSql)) {
deleteDataStmt.setInt(1, 5);
deleteDataStmt.executeUpdate();
}
}
// Update data
private static void updateData(Connection conn) throws SQLException {
String updateDataSql = "UPDATE test_tbl1 SET name = ? WHERE id = ?";
try (PreparedStatement updateDataStmt = conn.prepareStatement(updateDataSql)) {
updateDataStmt.setString(1, "test_update");
updateDataStmt.setInt(2, 5);
updateDataStmt.executeUpdate();
}
}
// Query data
private static void queryData(Connection conn) throws SQLException {
String queryDataSql = "SELECT * FROM test_tbl1";
try (PreparedStatement queryDataStmt = conn.prepareStatement(queryDataSql)) {
try (ResultSet rs = queryDataStmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("id: " + id + ", name: " + name);
}
}
}
}
}
See also
For more information about MySQL Connector/J, see Overview of MySQL Connector/J.
