1

I've tried looking for a similar question but I could find one, so I'll post one! I'm creating a Java program that drops certain tables for me, MySQL one looks like this:

String[] tablesToDrop = new String[]{tableName,tableName2};
Connection con = DriverManager.getConnection(dbUrl, userName,password);
Statement stmt = con.createStatement();

for (int i = 0; i < tablesToDrop.length; i++) {
                System.out.println("Dropping " + tablesToDrop[i] + " Table..");
                stmt.executeUpdate("DROP TABLE IF EXISTS " + tablesToDrop[i]);
            }

My question is how would this look for SQL Server 2008 version? the stmt.executeUpdate(???); part? I want to drop a table if it exists, getting the table names from an array and passing it into a for loop.

4

2 回答 2

3

Java 通过驱动程序与 DB 通信。它必须对应用程序程序员绝对透明。因此,MySql 和 MS SQL 服务器之间没有区别。换个驱动就好了。

然而,这可能是 SQL 方言的差异。通常人们会尝试通过使用 Java 到 DB 的映射框架(例如 JPA、Hibernate 等)来避免这种差异,但由于您使用的是普通 JDBC,因此这是您的责任。

我认为你现在正在尝试的那句话会奏效。但是对于将来,如果您想使用纯 JDBC 并支持多种数据库类型,我建议您将 SQL 语句保存在单独的文件(例如属性文件)中并从那里读取它们。您甚至可以使用 SQL 方言作为“语言环境”来滥用 ResouceBundle 机制。

于 2012-09-04T11:03:47.227 回答
3
IF EXISTS(select * from sysobjects where name='tblname') drop table tblname
于 2012-09-04T11:05:56.453 回答