从 MySQL 数据库插入 mdb

Posted

技术标签:

【中文标题】从 MySQL 数据库插入 mdb【英文标题】:insert into mdb from a MySQL database 【发布时间】: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 支持在同一个连接上,你不能在不同数据库的多个连接上这样做。 【参考方案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();
    

【讨论】:

以上是关于从 MySQL 数据库插入 mdb的主要内容,如果未能解决你的问题,请参考以下文章

从 LAMP 下运行的 MDB 文件读取二进制数据

MDB 文件到 Mysql

需要帮助从 delphi 将新联系人插入访问 mdb

简单访问 PHP

如何使用 PHP 将 mdb 文件转换为 mysql 文件或 mysql 命令?

向 MDB 插入和更新数据