gpt4 book ai didi

java - 从 Java 调用过程时出现 "The statement did not return a result set"

转载 作者:行者123 更新时间:2023-11-30 10:25:26 28 4
gpt4 key购买 nike

目前我正在从 SQL 服务器调用一个过程。

这是我的方法:

@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 调用它时在过程中添加一些东西?

最佳答案

注释掉 PRINT 语句,当您在数据库客户端中执行查询时,返回一个表。

在您的存储过程中,有插入和更新语句。如果存储过程之前执行任何插入或更新对于最终的选择,JDBC(SQL Server 驱动程序)与行数混淆(并且语句未返回结果的异常set 将被抛出)。

因此您只需在存储过程的开头添加 SET NOCOUNT ON。

关于java - 从 Java 调用过程时出现 "The statement did not return a result set",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46214932/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com