2017-05-26 47 views
0

我已經寫了一些Java代碼來使用JDBC將表中的內容從一個數據庫複製到另一個(它要求該表存在於兩個數據庫中,它不檢查目標表是否存在它正在複製的任何數據)。是否有一個JDBC命令來禁用表中的索引

它使用PreparedStatements,並以10,000的塊爲單位進行復制。我想添加禁用所有索引/外鍵約束的功能,然後在表完成複製時重新啓用它們。

有沒有辦法使用純JDBC來做到這一點,即不只是解僱一些供應商特定的代碼?

+0

您使用的數據庫是? JDBC只是一個與數據庫無關的API,這屬於不屬於JDBC的數據庫特定功能的範疇。 –

+0

@MarkRotteveel如果只有數據庫特定的方法來做到這一點,答案將是「否」。 :-( –

+0

是的,沒錯。 –

回答

2

JDBC本身沒有提供這樣的功能。您將需要使用數據庫特定功能來執行此操作。

1

簡答:不,沒有。

較長的答案: 給出一個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); 
相關問題