2017-10-03 16 views
0

からmdbファイルに挿入:私は私ので、接続がなされるべきであるかどうかはわかりません今は1つのデータベース(MySQL)に接続していますが、今度はmdb(Access)に接続する必要があります。 私は "UCanAccess"を使うことができるようになってきましたが、少し骨があり、うまくいくかどうかは分かりません。私は同じ名前</p> <p>問題で複数のテーブルをMySQLのデータをAccessデータベースに挿入しようとしているMySQLデータベース

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';"); 
+0

を、彼らは正しい上で行われる必要がある2つの別々の操作です接続。 'MySQL_con'で選択を実行し、' Acc_con'で挿入します。 'INSERT INTO [...] SELECT'は同じ接続でサポートされています。異なるデータベースを使用した複数の接続では実行できません。 – BackSlash

答えて

1

のMySQLのConnector/Jは、Accessデータベースに書き込むことができないと、あなたの質問で説明したように、単一のステートメントを使用してデータをコピーすることはできませんのでUCanAccessは、MySQLデータベースから読み取ることができません。代わりに、あなたはMySQLの接続を使用して読み、UCanAccess接続、このような何か使用して記述します。あなたは、MySQLから選択し、アクセスに挿入する必要が

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(); 
    } 
} 
関連する問題