Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java应用程序中删除是否存在查询_Java_Sql Server_For Loop - Fatal编程技术网

在Java应用程序中删除是否存在查询

在Java应用程序中删除是否存在查询,java,sql-server,for-loop,Java,Sql Server,For Loop,我试着寻找一个类似的问题,但我能找到一个,所以我会发布一个!我正在创建一个Java程序,为我删除某些表,MySQL one如下所示: String[] tablesToDrop = new String[]{tableName,tableName2}; Connection con = DriverManager.getConnection(dbUrl, userName,password); Statement stmt = con.createStatement(); for (int i

我试着寻找一个类似的问题,但我能找到一个,所以我会发布一个!我正在创建一个Java程序,为我删除某些表,MySQL one如下所示:

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]);
            }
String[]tablesToDrop=新字符串[]{tableName,tableName 2};
Connection con=DriverManager.getConnection(dbUrl、用户名、密码);
语句stmt=con.createStatement();
for(int i=0;i
我的问题是,对于SQLServer2008版本,这会是什么样子?stmt.executeUpdate(??);
部分如果表存在,我想删除它,从数组中获取表名并将其传递到for循环。

Java通过驱动程序与DB通信。对于应用程序程序员来说,它必须是绝对透明的。所以,MySql和MS SQL server之间没有区别。换个司机就行了

然而,这可能是SQL方言的不同之处。通常,人们试图通过使用Java到DB的映射框架(如JPA、Hibernate等)来避免这种差异,但由于您使用的是纯JDBC,这是您的责任


我认为你现在尝试的说法会奏效。但对于将来,如果您想使用普通JDBC并支持几种DB类型,我建议您将SQL语句保存在单独的文件(例如属性文件)中,并从中读取它们。您甚至可以使用SQL方言作为“语言环境”滥用ResourceBundle机制。

Java通过驱动程序与DB通信。对于应用程序程序员来说,它必须是绝对透明的。所以,MySql和MS SQL server之间没有区别。换个司机就行了

然而,这可能是SQL方言的不同之处。通常,人们试图通过使用Java到DB的映射框架(如JPA、Hibernate等)来避免这种差异,但由于您使用的是纯JDBC,这是您的责任



我认为你现在尝试的说法会奏效。但对于将来,如果您想使用普通JDBC并支持几种DB类型,我建议您将SQL语句保存在单独的文件(例如属性文件)中,并从中读取它们。您甚至可以使用SQL方言作为“区域设置”滥用ResourceBundle机制。

不是sqlserver专家,但尽管给出的答案会起作用,但我建议允许应用程序删除表是一种不好的做法,而且可能会有危险,因为它允许应用程序对数据库进行过多访问。我建议使用临时表或表变量来代替瞬态数据结构。这很奇怪,这个家伙编辑了我的文章,似乎与Java无关,但它确实如此。那家伙有没有读过我的帖子,或者只是随便换了标签-不是sqlserver专家,但尽管给出的答案会起作用,但我建议允许应用程序删除表是一种不好的做法,而且可能会有危险,因为它允许应用程序对数据库进行过多的访问。我建议使用临时表或表变量来代替瞬态数据结构。这很奇怪,这个家伙编辑了我的文章,似乎与Java无关,但它确实如此。那家伙有没有读过我的帖子,或者只是随便换了标签-+答案很好,因为它解释了很多事情。我想添加到另一篇文章的链接,因为方言不同:我的驱动程序会动态变化,它会检测我连接到的数据库类型,但查询是在服务器本身内执行的。这个程序是为一个公司,他们的结构已经有很长一段时间了,我会这样做,但目前我在公司里是无名小卒:)是的,它确实解释了很多,我也是+1,但我只是在寻找要执行的查询,谢谢先生。要执行的查询我在我的评论中提供了一个链接。正如我现在看到的,@AnandPhadke在另一个答案中也提供了类似的东西。+1这个答案很好,因为它解释了很多事情。我想添加到另一篇文章的链接,因为方言不同:我的驱动程序会动态变化,它会检测我连接到的数据库类型,但查询是在服务器本身内执行的。这个程序是为一个公司,他们的结构已经有很长一段时间了,我会这样做,但目前我在公司里是无名小卒:)是的,它确实解释了很多,我也是+1,但我只是在寻找要执行的查询,谢谢先生。要执行的查询我在我的评论中提供了一个链接。正如我现在看到的,@AnandPhadke在另一个回答中也提供了类似的内容。谢谢,希望这能起作用,因为我还没有在该公司建立测试数据库,目前无法在实时系统上尝试这些东西。因此声明应该如下所示:stmt.executeUpdate(“如果存在”)(选择*from sysobjects where name='tabletestodrop[i]')DROP TABLE tabletestodrop[i]);?关于oracle呢?谢谢,希望这能起作用,因为我公司还没有建立测试数据库,目前无法在实时系统上尝试这些功能。因此语句应该如下所示:stmt.executeUpdate(“如果存在”)(从sysobjects中选择*,其中name='tablesToDrop[i]')删除TABLE tablesToDrop[i];?oracle呢??
IF EXISTS(select * from sysobjects where name='tblname') drop table tblname