从 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的主要内容,如果未能解决你的问题,请参考以下文章