该语句未返回结果集。Java错误。

7

我正在尝试使用JDBC从Java中删除表中的数据。首先计算行数以确保表不为空,然后截断数据。

以下是我使用的代码:

  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection con = DriverManager.getConnection("jdbc:sqlserver://m-i:1433;databaseName=Tes", "sa", "Password");
    Statement cnnt= con.createStatement();
    Statement del1 = con.createStatement();
    ResultSet rs = cnnt.executeQuery("Select count(lea) AS cnt from dbo.Link");
   int count= 0;
    if(rs.next())
    {
        count = rs.getInt("cnt");
    }
  System.out.println(count);
 if(count != 0)
 {
   del1.executeQuery("Truncate Table dbo.Link");
 }
else
   {
       System.out.println("Table is already empty");
   }

错误:

 Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:800)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616)

错误出现在截断表 dbo.Link 上。

我这样做是正确的吗?

可以有人帮我吗?谢谢。

1个回答

23
不要使用executeQuery执行DDL语句;使用executeUpdate

引用来自链接的Javadocs:

执行给定的SQL语句,该语句可能是INSERT、UPDATE或DELETE语句,也可能是不返回任何内容的SQL语句,例如SQL DDL语句。

(我强调)

而清空表语句是一个DDL语句。


@Smit - 选择不是问题。OP说:“错误出现在 Truncate Table dbo.Link。”。 - rgettman
哇,谢谢你。我没有看到那个。 - Huzaifa
@rgettman 在你更新答案之前,之前的评论是有效的。我会删除那个评论。 - Smit
@rgettman感谢您为像我这样的初学者发布了非常有用的答案。我有一个关于我的Java代码的简单问题。这是我在stakoverflow上提出的问题-什么意思(com.microsoft.sqlserver.jdbc.SQLServerException:索引0超出范围)异常。我只想知道是否有办法从数据库中自动获取列号,而不是在我的第一个for循环中手动放置列号。 - Shantanu Nandan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接