我已经写了一些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如果只有数据库特定的方法来做到这一点,答案将是“否”。 :-( –
是的,没错。 –