我已經寫了一些Java代碼來使用JDBC將表中的內容從一個數據庫複製到另一個(它要求該表存在於兩個數據庫中,它不檢查目標表是否存在它正在複製的任何數據)。是否有一個JDBC命令來禁用表中的索引
它使用PreparedStatements,並以10,000的塊爲單位進行復制。我想添加禁用所有索引/外鍵約束的功能,然後在表完成複製時重新啓用它們。
有沒有辦法使用純JDBC來做到這一點,即不只是解僱一些供應商特定的代碼?
我已經寫了一些Java代碼來使用JDBC將表中的內容從一個數據庫複製到另一個(它要求該表存在於兩個數據庫中,它不檢查目標表是否存在它正在複製的任何數據)。是否有一個JDBC命令來禁用表中的索引
它使用PreparedStatements,並以10,000的塊爲單位進行復制。我想添加禁用所有索引/外鍵約束的功能,然後在表完成複製時重新啓用它們。
有沒有辦法使用純JDBC來做到這一點,即不只是解僱一些供應商特定的代碼?
JDBC本身沒有提供這樣的功能。您將需要使用數據庫特定功能來執行此操作。
簡答:不,沒有。
較長的答案: 給出一個java.sql.Connection theConnection:
DatabaseMetaData metaData = theConnection.getMetaData();
String dbType = metaData.getDatabaseProductName();
String command;
爲 「MySQL的」:
command = "ALTER TABLE <tableName> [ENABLE | DISABLE] KEYS;"
爲 「Microsoft SQL Server的」:
command = "ALTER INDEX ALL ON <tableName> [REBUILD | DISABLE];"
(感到鼓勵在下面添加其他DB命令。)一旦你有了命令,執行它
Statement stmt = theConnection.createStatement();
stmt.execute (command);
您使用的數據庫是? JDBC只是一個與數據庫無關的API,這屬於不屬於JDBC的數據庫特定功能的範疇。 –
@MarkRotteveel如果只有數據庫特定的方法來做到這一點,答案將是「否」。 :-( –
是的,沒錯。 –