2013-05-03 41 views
-1

以下代码工作 - 更新表(通过查看代码执行前后的表内容,在SQL服务器上进行确认)。更新表时生成异常 - java

但是,当我在NetBeans中并从命令行运行程序时,只要执行“rs = stmt.executeQuery(SQLquery);”,CATCH块就会捕获异常。

我知道这是因为在CATCH块的执行从未执行之前,系统“System.out.println(”已成功更新!“);”。如果我将它移动到“rs = stmt.executeQuery(SQLquery);”之后,它也不会执行。

异常错误是:

run: 
The statement did not return a result set. 
BUILD SUCCESSFUL (total time: 0 seconds) 

我不明白我做了什么错。

我也尝试使用 “RS = stmt.executeUpdate(SqlQuery类);” 而不是 “RS = stmt.executeQuery(SqlQuery类);”,但NetBeans的有红色感叹号本笔记,当我徘徊在它:

incompatible types 
    required: ResultSet 
    found: int 

如果我编译它,NetBeans的吐出了这一点:

C:\Java\Example\src\example\Example.java:56: error: incompatible types 
      rs = stmt.executeUpdate(SQLquery); 
           ^
    required: ResultSet 
    found: int 
1 error 

哎呀。我疯了! 请帮忙!

package example; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.PrintWriter; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

class Example 
{ 
    public static void main(String args[]) 
    { 
     String host = "jdbc:sqlserver://SERVER1\\Primrose;databaseName=Primrose"; 
     String uName = "sa"; 
     String uPwd = "[email protected]@ct"; 

     String SQLquery = ""; 

     int totalFolders = 4; 

     int getRecId = 0; 
     String getUser = ""; 
     String getSection = ""; 
     String getKey = ""; 
     String getValue = ""; 
     String getExtraInfo = ""; 

     try 
     { 
      Connection con = DriverManager.getConnection(host, uName, uPwd); 
      Statement stmt = con.createStatement(); 

      SQLquery = "SELECT * FROM _Registry WHERE (Section = 'RecIds' AND Key_ = '_Folders' AND User_ = 'sc_general')"; 

      ResultSet rs = stmt.executeQuery(SQLquery); 

      while (rs.next()) 
      { 
       getRecId = rs.getInt("RecId"); 
       getUser = rs.getString("User_"); 
       getSection = rs.getString("Section"); 
       getKey = rs.getString("Key_"); 
       getValue = rs.getString("Value"); 
       getExtraInfo = rs.getString("ExtraInfo"); 

       getValue = getValue.trim();       // Strip trailing spaces from string 
       int newValue = Integer.parseInt(getValue) + 1;  // Convert string to number so I can add it to total folders 
       newValue = newValue + totalFolders;     // Change to total + existing value to write back to dB 
       getValue = Integer.toString(newValue);    // Convert to string as required by the table 
      } 

      SQLquery = "UPDATE _Registry SET Value=" + getValue + " WHERE (RecId = 5 AND User_ = 'sc_general' AND Section = 'RecIds' AND Key_ = '_FOLDERS')"; 

      rs = stmt.executeQuery(SQLquery); 

      rs.updateInt("RecId", getRecId); 
      rs.updateString("User_", getUser); 
      rs.updateString("Section", getSection); 
      rs.updateString("Key_", getKey); 
      rs.updateString("Value", getValue); 
      rs.updateString("ExtraInfo", getExtraInfo); 
      rs.updateRow(); 

      System.out.println("Updated successfully!"); 
     } 

     catch (SQLException err) 
     { 
      System.out.println(err.getMessage()); 
     } 
    } 
} 

回答

0

executeUpdate方法返回受影响的行数,这就是为什么你有这样的错误。

所以这是很好的使用这种方法。但是你不会检索编辑的值。

1

查看您正在使用的JRE的PreparedStatement的javadocs。 PreparedStatement.executeUpdate()返回已更新的行数的整数。 Here是一个链接到PreparedStatement文档。

2

函数 “stmt.executeUpdate(的SQLQuery);”返回一个Integer,因为你没有从数据库中检索任何数据。试试这个:

Integer c = stmt.executeUpdate(SQLquery); 

Integer值表示有多少行已被改变。