2017-05-26 67 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); 
相关问题