Java 手动连接多个数据库

在Java开发中,我们经常需要连接数据库来存储和获取数据。通常情况下,我们会使用数据库驱动程序来连接单个数据库。但是,在某些情况下,我们可能需要连接多个数据库,以便在不同的数据库之间进行数据传输或数据同步。

本文将介绍如何在Java中手动连接多个数据库,并提供代码示例和相应的类图和序列图。

1. 准备工作

在开始之前,我们需要确保已经安装并配置了需要连接的数据库,例如MySQL和Oracle。同时,我们还需要下载并引入相应的数据库驱动程序。

在这里,我们假设已经安装了MySQL和Oracle,并且已经下载了对应的驱动程序。

2. 创建数据库连接类

我们首先需要创建一个数据库连接类,用于连接和操作数据库。这个类将包含连接数据库的逻辑和相应的方法。

类图

使用mermaid语法,我们可以绘制以下类图:

classDiagram
    class DatabaseConnection {
        - driver: String
        - url: String
        - username: String
        - password: String
        + connect(): Connection
        + executeQuery(sql: String): ResultSet
        + executeUpdate(sql: String): int
        + close(conn: Connection, stmt: Statement, rs: ResultSet)
    }

代码示例

public class DatabaseConnection {
    private String driver;
    private String url;
    private String username;
    private String password;

    public DatabaseConnection(String driver, String url, String username, String password) {
        this.driver = driver;
        this.url = url;
        this.username = username;
        this.password = password;
    }

    public Connection connect() throws ClassNotFoundException, SQLException {
        Class.forName(driver);
        return DriverManager.getConnection(url, username, password);
    }

    public ResultSet executeQuery(String sql) throws ClassNotFoundException, SQLException {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            conn = connect();
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
        } finally {
            close(conn, stmt, rs);
        }

        return rs;
    }

    public int executeUpdate(String sql) throws ClassNotFoundException, SQLException {
        Connection conn = null;
        Statement stmt = null;

        try {
            conn = connect();
            stmt = conn.createStatement();
            return stmt.executeUpdate(sql);
        } finally {
            close(conn, stmt, null);
        }
    }

    public void close(Connection conn, Statement stmt, ResultSet rs) throws SQLException {
        if (rs != null) {
            rs.close();
        }
        if (stmt != null) {
            stmt.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}

这个类包含了连接数据库、执行查询和更新操作以及关闭连接的方法。我们可以根据具体的需求进行扩展和修改。

3. 使用数据库连接类连接多个数据库

在我们创建了数据库连接类之后,我们可以使用它来连接多个数据库,并执行相应的操作。

代码示例

public class Main {
    public static void main(String[] args) {
        String mysqlDriver = "com.mysql.jdbc.Driver";
        String mysqlUrl = "jdbc:mysql://localhost:3306/database1";
        String mysqlUsername = "root";
        String mysqlPassword = "password1";

        String oracleDriver = "oracle.jdbc.driver.OracleDriver";
        String oracleUrl = "jdbc:oracle:thin:@localhost:1521:database2";
        String oracleUsername = "system";
        String oraclePassword = "password2";

        try {
            DatabaseConnection mysqlConnection = new DatabaseConnection(mysqlDriver, mysqlUrl, mysqlUsername, mysqlPassword);
            DatabaseConnection oracleConnection = new DatabaseConnection(oracleDriver, oracleUrl, oracleUsername, oraclePassword);

            // 连接MySQL数据库
            Connection mysqlConn = mysqlConnection.connect();
            // 执行查询操作
            ResultSet mysqlResultSet = mysqlConnection.executeQuery("SELECT * FROM table1");

            // 连接Oracle数据库
            Connection oracleConn = oracleConnection.connect();
            // 执行查询操作
            ResultSet oracleResultSet = oracleConnection.executeQuery("SELECT * FROM table2");

            // 关闭连接
            mysqlConnection.close(mysqlConn, null, mysqlResultSet);
            oracleConnection.close(oracleConn, null, oracleResultSet);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了两个数据库连接对象,并分别连接了MySQL和Oracle数据库。我们可以根据实际情况执行相应的查询操作,并关闭连接。

4. 总结

通过这篇文章,我们学习了如何在Java中手动连接多个数据库。