2017-09-14 79 views
2

當前我正在從SQL服務器調用過程。從java調用過程時,「語句沒有返回結果集」

這裏是我的方法:

@Override 
    public String savePersonalData(PersonalDataDto personalDataDto) throws SQLException { 
     String output = ""; 
     Connection conn = null; 
     Statement sta = null; 
     String errorClassAndMethod = getErrorContainingClassAndMethod(); 
     try { 
      Gson gson = new GsonBuilder().create(); 
      String json = gson.toJson(personalDataDto); 
      org.json.JSONObject jsonInput = new org.json.JSONObject(json); 

      conn = createConnection(jsonInput); 

      sta = conn.createStatement(); 
      String SPsql = "EXEC SP_UpdateAdvisoryBoxPersonalData ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?"; 

      PreparedStatement ps = conn.prepareStatement(SPsql); 
      // ps.setEscapeProcessing(true); 

      System.out.println(personalDataDto); 

      ps.setString(1, personalDataDto.getClientId()); 
      ps.setString(2, personalDataDto.getDivisionId()); 
      ps.setString(3, personalDataDto.getClientRoleId()); 
      ps.setString(4, personalDataDto.getUserID()); 
      ps.setString(5, personalDataDto.getUserLoginDetailId()); 

      ps.setString(6, personalDataDto.getPersonalData().getAnv_Om_PlaatsGeboorte()); 
      ps.setString(7, personalDataDto.getPersonalData().getNaw_Om_Postcode()); 
      ps.setString(8, personalDataDto.getPersonalData().getNaw_Om_Voorletters()); 
      ps.setString(9, personalDataDto.getPersonalData().getNaw_Om_Naam()); 
      ps.setDate(10, personalDataDto.getPersonalData().getAnv_Dt_Geboorte()); 
      ps.setString(11, personalDataDto.getPersonalData().getAnv_Om_Email()); 
      ps.setString(12, personalDataDto.getPersonalData().getAnv_Om_TelefoonPrive()); 
      ps.setString(13, personalDataDto.getPersonalData().getAnv_Om_TelefoonWerk()); 
      ps.setString(14, personalDataDto.getPersonalData().getNaw_Om_Voornamen()); 
      ps.setString(15, personalDataDto.getPersonalData().getNaw_om_iban()); 
      ps.setString(16, personalDataDto.getPersonalData().getAnv_Om_LegitimatieAfgifte()); 
      ps.setInt(17, personalDataDto.getPersonalData().getNaw_Id()); 
      ps.setString(18, personalDataDto.getPersonalData().getNaw_Nr_Huis()); 
//   ps.setInt(19, personalDataDto.getPersonalData().getNaw_Id()); 
      ps.setString(19, personalDataDto.getPersonalData().getNaw_Om_Straat()); 

      ps.setString(20, personalDataDto.getPersonalData().getAnv_Om_TelefoonMobiel()); 
      ps.setString(21, personalDataDto.getPersonalData().getAnv_Cd_Nationaliteit()); 



      ResultSet rs = ps.executeQuery(); 

      /*boolean gotResults = ps.execute(); 
      ResultSet rs = null; 
      if(!gotResults){ 
       System.out.println("No results returned"); 
      } else { 
       rs = ps.getResultSet(); 
       System.out.println(rs.getMetaData()); 
      }*/ 

     } catch (Exception e) { 
      e.printStackTrace(); 
      String errorMessageAndClassWithMethod = getErrorContainingClassAndMethod(); 
      throw new SpringAppRuntimeException(errorMessageAndClassWithMethod + e.toString()); 
     } finally { 
      if (sta != null) { 
       conn.close(); 
      } 
      if (conn != null) { 
       conn.close(); 
      } 
     } 
     return output; 
    } 

我使用這兩種不同的DTO。 PersonalDataDto是這樣的:

public class PersonalDataDto { 

    private String nawId; 
    private String serverName; 
    private String userName; 
    private String password; 
    private String databaseName; 

    private String clientId; 
    private String divisionId; 
    private String clientRoleId; 
    private String userID; 
    private String userLoginDetailId; 

    private PersonalDataInfoDto personalData; 

// getters and setters for all 

} 

下一個是PersonalDataInfoDto,它是這樣的:

public class PersonalDataInfoDto { 

    private String anv_Om_TelefoonMobiel; 

    private int naw_Id; 

    private String anv_Om_TelefoonPrive; 

    private String anv_Om_LegitimatieAfgifte; 

    private int advisoryBoxContactRefID; 

    private String naw_Om_Straat; 

    private String naw_Om_Postcode; 

    private String anv_Om_Email; 

    private String naw_Nr_Huis; 

    private String naw_Om_Voorletters; 

    private String anv_Om_TelefoonWerk; 

    private String naw_Om_Voornamen; 

    private Date anv_Dt_Geboorte; 

    private String naw_om_iban; 

    private String anv_Om_PlaatsGeboorte; 

    private String naw_Om_Naam; 

    private String anv_Cd_Nationaliteit; 

// getters and setters for all 

} 

錯誤是:

com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set. 

我應該在代碼什麼樣的變化/輸入來獲得程序結果集? 我是否需要在程序中添加某些內容,同時通過java調用它,就像我在該方法中所做的那樣?

+0

註釋掉您的PRINT並給出您輸出的字段的一些名稱:SELECT'Inserted Contact'as res_set – sepupic

回答

1

註釋掉PRINT語句,並且當您在數據庫客戶端中執行查詢時,將返回一個表。

在存儲過程中,有插入和更新語句。如果存儲過程執行任何插入或更新之前 到最後選擇,JDBC(SQL Server驅動程序)與行計數混淆(並且異常聲明未返回結果 集將被拋出)。

因此,您只需在存儲過程的開始處添加SET NOCOUNT ON。

相關問題