2016-04-14 47 views
1

我正在为大学中的DBMS项目创建保险管理系统,并且在从SQL Server中删除记录时遇到问题。它引发一个异常:Java&SQL Server例外:声明未返回结果集

SqlException:com.microsoft.sqlserver.jdbc.SQLServerException:该语句没有返回结果集。

它也成功地从我的数据库中删除了一条记录。任何人都可以请告诉我如何删除这种异常?

String SQL="delete from INMS_3 where Agent_Id=? and First_Name=? and Last_Name=? and User_Name=? and Phone_no=?"; 

try { 
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    String connectionUrl = "jdbc:sqlserver://localhost:1433;" + 
     "databaseName=INMS;user=TestingUser;password=1234;"; 
    Connection con = DriverManager.getConnection(connectionUrl); 
    System.out.println("Connected to sql server"); 

    String str=jTextField1.getText(); 
    String str1=jTextField2.getText(); 
    String str2=jTextField3.getText(); 
    String str3=jTextField4.getText(); 
    String str4=jTextField5.getText(); 

    PreparedStatement st = con.prepareStatement(SQL); 

    st.setString(1, str); 
    st.setString(2,str1); 
    st.setString(3,str2); 
    st.setString(4,str3); 
    st.setString(5, str4); 

    ResultSet rs = st.executeQuery(); 

    if(rs.next()); 
    { 
     JOptionPane.showMessageDialog(null,"Deleted Succesfully"); 
    } 

    if(!rs.next()) 
    { 
     JOptionPane.showMessageDialog(null,"Unable to delete"); 
    } 
    else 
    { 
     JOptionPane.showMessageDialog(null,"Unable to delete"); 
    } 
} catch (SQLException e) { 
    System.out.println("SQL Exception: "+ e.toString()); 
} catch (ClassNotFoundException cE) { 
    System.out.println("Class Not Found Exception: "+ cE.toString()); 
} 

回答

1

我认为你使用错误的东西来执行删除操作。 尝试使用st.executeUpdate()而不是ResultSet rs = st.executeQuery() - 您正在执行删除而不是返回结果集的内容。

+0

正是! =)这是真正的答案。 –

1

这不是SQL Server的问题。问题出在你的代码上(这是什么?C#?该对象被设置为期望从服务器得到结果集,但查询是DELETE语句,并且那些不返回行......永远不会返回。编程语言,以及研究如何执行语句,而不是请求的结果集。

这条线使一个SELECT感不是一个UPDATE

ResultSet rs = st.executeQuery(); 
0

,如果你执行一个delete语句,你为什么执行

ResultSet rs = st.executeQuery(); 

下面是一个示例c#ado.net。如果你使用java,它的概念是一样的。

using(var conn = new SqlConnection("my connection string")) 
    { 
     var deleteCmd = new SqlCommand(); 
     deleteCmd.Connection = conn; 
     deleteCmd.CommandType = CommandType.Text; 
     deleteCmd.CommandText = @" 
      DELETE Accounts 
      WHERE account_id = @p_account_id 
     "; 
     deleteCmd.Parameters.AddWithValue("p_account_id", 123); 

     conn.Open(); 
     deleteCmd.ExecuteNonQuery(); 
    }