【问题标题】:insert into mdb from a MySQL database从 MySQL 数据库插入 mdb
【发布时间】:2017-10-03 16:05:31
【问题描述】:

我正在尝试将带有多个同名表的 MySQL 数据插入 Access 数据库

问题:我不确定应该如何建立连接,因为我只连接到 1 个数据库 (MySQL),现在我需要连接到 mdb (Access)。 我已经到了可以使用“UCanAccess”的地步,但它有点简单,我不确定它是否会起作用。

 Class clazz = Class.forName("com.mysql.jdbc.Driver");
 Class clazz2 = Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

 Connection MySQL_con = DriverManager.getConnection(URL,USERNAME,PASSWORD);
 Connection Acc_con = DriverManager.getConnection(URL2);

 //How can I connect to Access and MySQL?
 PreparedStatement pst = MySQL_con.prepareStatement(
 "INSERT INTO DB2.dbo.table1
   SELECT * FROM DB1.dbo.table1
   WHERE DB1.table1.x='5';");

【问题讨论】:

  • 您需要从mysql中选择并插入访问,它们是两个单独的操作,需要在正确的连接上完成。在MySQL_con 上执行选择并使用Acc_con 插入。 INSERT INTO [...] SELECT 支持在同一个连接上,你不能在不同数据库的多个连接上这样做。

标签: java mysql jdbc ucanaccess


【解决方案1】:

MySQL 连接器/J 无法写入 Access 数据库,UCanAccess 无法从 MySQL 数据库读取,因此您将无法使用问题中所述的单个语句复制数据。相反,您将使用 MySQL 连接读取并使用 UCanAccess 连接写入,如下所示:

try (
        Connection mysqlConn = DriverManager.getConnection(mysqlConnUrl);
        Statement mysqlStmt = mysqlConn.createStatement();
        ResultSet mysqlRs = mysqlStmt.executeQuery(
                "SELECT client_id, last_name FROM client WHERE x = '5'");
        Connection ucanaccessConn = DriverManager.getConnection(ucanaccessConnUrl);
        PreparedStatement ucanaccessStmt = ucanaccessConn.prepareStatement(
                "INSERT INTO client (client_id, last_name) VALUES (?, ?)")) {
    while (mysqlRs.next()) {
        ucanaccessStmt.setInt(1, mysqlRs.getInt(1));
        ucanaccessStmt.setString(2, mysqlRs.getString(2));
        ucanaccessStmt.executeUpdate();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多