2016-04-07 15 views
0

Ich führe eine Speicherprozedur in Java aus. Eine der Prozeduren gibt mehrere Zeilen zurück.So rufen Sie ResultSet von CallableStatment nach executeUpdate() ab

int haveResults = Param.callableStatement.executeUpdate(); 
System.out.println(haveResults); 
if (haveResults > 0) { 
    System.out.println("I have results"); //This statement is printed 
    ResultSet rs = Param.callableStatement.getResultSet(); 
    while (rs.next()) { //This is where I am getting error:NullPointerException 
     //If I comment 'while(rs.next())' then code is giving output but then it can't handle multiple rows 
     itr1 = listOutParam.iterator(); 
     while (itr1.hasNext()) { 
      Object obj = null; 
      obj = ParameterGetter.getParameter(itr1.next().toString(), counter1); 
      list.add(obj); 
      counter1++; 
     } 
     System.out.println(list.toString()); 
     list1.add(list); 
     counter1 = counter2; 
    } 
} 
} 

Ich habe versucht, mit execute(), aber dann, wenn false Wert zurückgibt angibt, dass die Prozedur nicht erfolgreich ausgeführt wird.

+0

tun 'while (rs.hasNext()) {' statt 'while (rs.next()) {'. Genau wie in der zweiten while-Schleife – jhamon

+1

ResultSet hat keine hasNext-Methode – Abhishek

+0

Wie im verknüpften Duplikat erklärt ein 'false' Ergebnis von' execute' (oder 'getMoreResults') bedeutet nicht, dass es keine Ergebnisse gibt; Es bedeutet nur, dass das aktuelle Ergebnis eine Aktualisierungsanzahl und keine Ergebnismenge ist. Anstatt den Ansatz in der verknüpften Frage zu verwenden, können Sie auch "SET NOCOUNT ON" in der ersten Zeile der gespeicherten Prozedur hinzufügen. –

Antwort

1

Wenn Sie eine ResultSet von einem CallableStatement abrufen möchten Sie müssen execute() verwenden statt executeUpdate()

if (Param.callableStatement.execute()) { 
    ResultSet rs = Param.callableStatement.getResultSet(); 
    ... 
} 
+0

Ich habe versucht, mit execute(), aber dann, wenn false Wert zurückgibt angibt, dass die Prozedur nicht erfolgreich ausgeführt wird. – Abhishek

+0

Ohne die execute() Methode ist es möglich ResultSet zu bekommen? – Abhishek

+0

@Abhishek 'execute' kann mehrere Ergebnisse zurückgeben. Lesen Sie das Javadoc von 'PreparedStatement.execute', um zu verstehen, – wero

Verwandte Themen