2016-04-14 5 views
1

Ich erstelle ein Versicherungsverwaltungssystem für mein DBMS-Projekt an der Universität, und ich habe ein Problem mit dem Löschen eines Datensatzes von SQL Server. Es löst eine Ausnahme:Java & SQL Server-Ausnahme: Die Anweisung hat keine Ergebnismenge zurückgegeben.

SqlException: com.microsoft.sqlserver.jdbc.SQLServerException: Die Anweisung keine Ergebnismenge zurückkehrte.

Es löschte auch erfolgreich einen Datensatz aus meiner Datenbank. Könnte mir bitte jemand sagen, wie man diese Art von Ausnahme entfernt?

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()); 
} 

Antwort

1

Ich denke, Sie verwenden die falsche Sache, um den Löschvorgang durchzuführen. Versuchen Sie, st.executeUpdate() anstelle von ResultSet rs = st.executeQuery() zu verwenden - Sie führen ein Löschen statt etwas aus, das eine Ergebnismenge zurückgeben würde.

+0

Genau! =) Das ist die wirkliche Antwort. –

1

Dies ist kein Problem mit SQL Server. Das Problem ist mit Ihrem Code (was ist das? C#? Das Objekt ist gesetzt, um eine Ergebnismenge vom Server erwarten, aber die Abfrage ist eine DELETE-Anweisung, und diese geben keine Zeilen ... immer.

Geben Sie die Programmiersprache und Forschung, wie Anweisung auszuführen, anstatt anfordernden Ergebnismengen.

Diese Linie macht Sinn für eine SELECT nicht für eine UPDATE

ResultSet rs = st.executeQuery(); 
0

, wenn Sie eine Anweisung delete sind ausführen, warum Sie ausführen

ResultSet rs = st.executeQuery(); 

Hier ist ein Beispiel C# ado.net. Konzept es das gleiche, wenn Sie Java verwenden.

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(); 
    } 
Verwandte Themen