【发布时间】:2017-04-05 07:47:53
【问题描述】:
我正在尝试获取传递给另一个 SP 的输出参数,所以我也创建了一个测试,看看我是否可以从中获取字符串但抛出异常:
java.sql.SQLException: 无效状态,ResultSet 对象已关闭
没有cs.getMoreResults(); 会引发另一个异常:
java.sql.SQLException:尚未处理输出参数。调用 getMoreResults()。
如果我确实删除了我的if (rs.next()) {,那么它会起作用。
如何获取输出参数并仍然使用我的if rs.next?
protected String doInBackground(String... params) {
if (userid.trim().equals("Developer")|| password.trim().equals("Dev!n_234"))
isSuccess2=true;
z = getString(R.string.login_succes);
if(userid.trim().equals("")|| password.trim().equals(""))
z = getString(R.string.indsæt_rigtigt_bruger);
else {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = getString(R.string.Forbindelses_fejl) + "L1)";
} else {
String ID;
ID = setingPreferences.getString("companyid", "");
CallableStatement cs = null;
String query = "{ call [system].[usp_validateUserLogin](?,?,?,?,?)} ";
cs = con.prepareCall(query);
cs.setString(1, userid);
cs.setString(2, password);
cs.setString(3, ID);
cs.setBoolean(4, true);
cs.registerOutParameter(5, Types.VARCHAR);
ResultSet rs = cs.executeQuery();
cs.getMoreResults();
System.out.println("Test : " + cs.getString(5));
if (rs.next()) {
z = getString(R.string.login_succes);
isSuccess = true;
} else {
z = getString(R.string.Invalid_Credentials);
isSuccess = false;
}
}
}
catch (Exception ex)
{
isSuccess = false;
z = getString(R.string.Exceptions)+"L2)";
Log.e("MYAPP", "exception", ex);
}
}
return z;
}
}
【问题讨论】:
-
读取javadoc for
Statement#getMoreResults:“并隐式关闭任何当前的ResultSet” -
尝试调用
cs.execute()(而不是cs.executeQuery()),然后看看是否可以从cs.getString(5)获取输出参数值。 -
我不能使用
cs.execute,因为它与我的ResultSet rs =类型不兼容,但如果我删除了我的if (rs.next()) {,那么它的工作原理是如何在我的代码中同时使用这两个东西?
标签: java sql-server jdbc