[英]Copying specific tables of a MySQL database to a MariaDB database in JDBC
我正在嘗試創建一個Java程序,將特定表從一台服務器上的MySQL數據庫復制到另一台服務器上的MariaDB。 我知道有mysqldump,但是程序的目的是要在不同的機器上運行,即使它們沒有安裝mysql。
我創建的內容似乎運行良好,例如,當我使用HeidiSQL連接到MariaDB時,生成的SQL看起來確實正確並可以執行。 但是,當我使用.executeQuery
執行sql時,收到一條錯誤消息,提示我的SQL存在問題。
代碼基本上是:
import java.sql.*
public class JdbcTest {
Connection conn = null;
Connection conn_2 = null;
Statement stmt = null;
Statement stmt_2 = null;
//MySQL
Class.forName("com.mysql.cj.jdbc.Driver");
//MariaDB
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("Connecting to DB1");
conn = DriverManager.getConnection(jdbc:mysql://server1/database,USER,PASS);
System.out.println("Connecting to DB2");
conn_2 = DriverManager.getConnection(jdbc:mariadb://server2/database,USER_2,PASS_2);
List<String> ConnToTableNames = new ArrayList<String>();
ConnToTableNames.add("table1");
ConnToTableNames.add("table2");
//Create queries for all tables in ConnToTableNames
stmt = conn.createStatement();
String exportSql = "";
for(String table : ConnToTableNames) {
//getting table structure
exportSql += "\n" +
"-- ----------------------------\n" +
"-- Table structure for `" + table+
"`\n-- ----------------------------\n"+
"DROP TABLE IF EXISTS `"+table+"`;\n";
ResultSet rs2 = stmt.executeQuery("SHOW CREATE TABLE `" + table + "`");
rs2.next();
exportSql += rs2.getString(2) + ";\n" +
"-- ----------------------------\n";
rs2.close();
//adding the content
ResultSet rss = stmt.executeQuery("select * from "+table);
while (rss.next()) {
int colCount = rss.getMetaData().getColumnCount();
if (colCount > 0) {
exportSql += "INSERT INTO `" + table +"` VALUES(";
for (int i = 0; i < colCount; i++) {
if (i > 0) {
exportSql += ",";
}
String s = "";
try {
s += "'";
s += rss.getObject(i + 1).toString();
s += "'";
} catch (Exception e) {
s = "NULL";
}
exportSql += s;
}
exportSql += ");\n";
}
}
rss.close();
}
//putting everything into the VM
stmt_2 = conn_2.createStatement();
stmt_2.executeQuery(exportSql);
stmt.close();
conn.close();
stmt_2.close();
conn_2.close();
}
我得到的錯誤是:
java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CREATE TABLE `supplier` (
`NUMMER` int(10) NOT NULL DEFAULT '0',
`PRIO` int(' at line 5
真正令我困惑的是:如果我將exportSql
轉儲到終端或文件中,並通過HeidiSQL執行該操作,它將起作用...
一個想法,我做錯了什么?
在此先感謝,祝您周末愉快
為了解決我的問題,我在連接字符串中添加了?allowMultiQueries=true
,並使用了execute()而不是executeQuery()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.