Java如何连接多个数据库
在开发过程中,我们经常需要连接多个数据库来进行数据的读取、写入和同步等操作。本文将介绍如何使用Java来连接多个数据库,并提供一个实际问题的解决方案。
问题描述
假设我们有两个数据库,一个是MySQL数据库,另一个是Oracle数据库。我们需要从MySQL数据库中读取数据,并将数据写入到Oracle数据库中。同时,我们还要实现数据的同步功能,即当MySQL数据库中的数据发生变化时,自动同步到Oracle数据库中。
解决方案
为了解决上述问题,我们可以使用Java中的数据库连接池来连接多个数据库,并使用触发器或轮询的方式来实现数据的同步。接下来,我们将分几个步骤来实现这个解决方案。
第一步:引入依赖
首先,我们需要引入数据库连接池和数据库驱动的依赖。在本例中,我们使用的是HikariCP作为数据库连接池,以及MySQL和Oracle的数据库驱动。
<!-- 数据库连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<!-- MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- Oracle数据库驱动 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
第二步:配置连接池
接下来,我们需要配置连接池,以便连接到MySQL和Oracle数据库。
MySQL数据库连接池配置
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class MySQLDataSource {
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USERNAME = "root";
private static final String PASSWORD = "password";
private static HikariConfig config;
private static HikariDataSource dataSource;
static {
config = new HikariConfig();
config.setJdbcUrl(URL);
config.setUsername(USERNAME);
config.setPassword(PASSWORD);
dataSource = new HikariDataSource(config);
}
public static HikariDataSource getDataSource() {
return dataSource;
}
}
Oracle数据库连接池配置
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class OracleDataSource {
private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static HikariConfig config;
private static HikariDataSource dataSource;
static {
config = new HikariConfig();
config.setJdbcUrl(URL);
config.setUsername(USERNAME);
config.setPassword(PASSWORD);
dataSource = new HikariDataSource(config);
}
public static HikariDataSource getDataSource() {
return dataSource;
}
}
第三步:读取MySQL数据并写入Oracle数据库
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.zaxxer.hikari.HikariDataSource;
public class DataSync {
public static void main(String[] args) {
HikariDataSource mysqlDataSource = MySQLDataSource.getDataSource();
HikariDataSource oracleDataSource = OracleDataSource.getDataSource();
Connection mysqlConnection = null;
Connection oracleConnection = null;
PreparedStatement selectStatement = null;
PreparedStatement insertStatement = null;
try {
mysqlConnection = mysqlDataSource.getConnection();
oracleConnection = oracleDataSource.getConnection();
// 从MySQL数据库中读取数据
String selectQuery = "SELECT * FROM my_table";
selectStatement = mysqlConnection.prepareStatement(selectQuery);
ResultSet resultSet = selectStatement.executeQuery();
while (resultSet.next()) {
// 将数据写入Oracle数据库
String insertQuery = "INSERT INTO my_table VALUES (?, ?)";
insertStatement = oracleConnection.prepareStatement(insertQuery);
insertStatement.setInt(1, resultSet.getInt("id"));
insertStatement.setString(2, resultSet.getString("name"));
insertStatement.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭连接和释放资源
try {
if (selectStatement != null) {
select