使用 ResultSet 渲染数据时出错
Error in rendering data using ResultSet
我在使用 ResultSet 呈现数据时遇到错误。我遇到此错误 java.sql.SQLException:结果集来自更新。没有数据。
这是我的代码片段
ArrayList<String> arrayList = new ArrayList<String>();
Session session = null;
Connection conn = null;
CallableStatement callableStatement = null;
try {
// test
BeanLocator beanLocator = PortletBeanLocatorUtil
.getBeanLocator("Mrcos-services-portlet");
BasicDataSource bds = (BasicDataSource) beanLocator
.locate("mrcosDataSourceTarget");
conn = bds.getConnection();
String sp = "{call TINChkSP(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
callableStatement = conn.prepareCall(sp);
callableStatement.setString(1, tin);
callableStatement.setString(2, branchCode);
callableStatement.setString(3, rdoCode);
callableStatement.registerOutParameter(4, Types.VARCHAR);
callableStatement.registerOutParameter(5, Types.VARCHAR);
callableStatement.registerOutParameter(6, Types.VARCHAR);
// all other callablestatement until all the 27 params are complete)
callableStatement.executeQuery();
ResultSet resultSet = callableStatement.executeQuery();
while (resultSet.next()) {
for (int i = 0; i <= 27; i++) {
arrayList.add(resultSet.getString(i));
}
}
我的 ResultSet 的输出为空,并给我 java.sql.SQLException:ResultSet 来自 UPDATE。无数据。 错误。请帮忙谢谢
编辑
我使用
callableStatement.getString(4);
callableStatement.getString(5);
callableStatement.getString(6);
检查了每个参数的 System.out
输出为:
42141
000
126
你的 OUT 参数的结果,在你的 callableExecution.executeQuery()
之后应该在 callableStatement
变量中。
要在执行后获取它们,您必须按其类型获取,如下所示:
String valueForOutput4 = callableStatement.getString(4);
String valueForOutput5 = callableStatement.getString(5);
String valueForOutput6 = callableStatement.getString(6);
我假设您想将所有 27 个固定参数传递给列表中的 TINChkSP
数据库 function/procedure。
我假设它们都是 String
类型。
我还假设前 3 个参数不是 OUT 参数,但所有其他参数都是 OUT 或 IN/OUT.
这是一个可能的解决方案。
callableStatement.executeQuery();
// The first 3 elements are not OUT parameters (I guess)
List<String> values = Arrays.asList(tin, branchCode, rdoCode);
for (int i = 4; i <= 27; i++) {
values.add(callableStatement.getString(i));
}
System.out.println("The list: " + values.toString);
然后您可以删除 ResultSet
的使用,因为它将毫无用处。
希望对您有所帮助。
我在使用 ResultSet 呈现数据时遇到错误。我遇到此错误 java.sql.SQLException:结果集来自更新。没有数据。 这是我的代码片段
ArrayList<String> arrayList = new ArrayList<String>();
Session session = null;
Connection conn = null;
CallableStatement callableStatement = null;
try {
// test
BeanLocator beanLocator = PortletBeanLocatorUtil
.getBeanLocator("Mrcos-services-portlet");
BasicDataSource bds = (BasicDataSource) beanLocator
.locate("mrcosDataSourceTarget");
conn = bds.getConnection();
String sp = "{call TINChkSP(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
callableStatement = conn.prepareCall(sp);
callableStatement.setString(1, tin);
callableStatement.setString(2, branchCode);
callableStatement.setString(3, rdoCode);
callableStatement.registerOutParameter(4, Types.VARCHAR);
callableStatement.registerOutParameter(5, Types.VARCHAR);
callableStatement.registerOutParameter(6, Types.VARCHAR);
// all other callablestatement until all the 27 params are complete)
callableStatement.executeQuery();
ResultSet resultSet = callableStatement.executeQuery();
while (resultSet.next()) {
for (int i = 0; i <= 27; i++) {
arrayList.add(resultSet.getString(i));
}
}
我的 ResultSet 的输出为空,并给我 java.sql.SQLException:ResultSet 来自 UPDATE。无数据。 错误。请帮忙谢谢
编辑
我使用 callableStatement.getString(4);
callableStatement.getString(5);
callableStatement.getString(6);
输出为:
42141
000
126
你的 OUT 参数的结果,在你的 callableExecution.executeQuery()
之后应该在 callableStatement
变量中。
要在执行后获取它们,您必须按其类型获取,如下所示:
String valueForOutput4 = callableStatement.getString(4);
String valueForOutput5 = callableStatement.getString(5);
String valueForOutput6 = callableStatement.getString(6);
我假设您想将所有 27 个固定参数传递给列表中的 TINChkSP
数据库 function/procedure。
我假设它们都是 String
类型。
我还假设前 3 个参数不是 OUT 参数,但所有其他参数都是 OUT 或 IN/OUT.
这是一个可能的解决方案。
callableStatement.executeQuery();
// The first 3 elements are not OUT parameters (I guess)
List<String> values = Arrays.asList(tin, branchCode, rdoCode);
for (int i = 4; i <= 27; i++) {
values.add(callableStatement.getString(i));
}
System.out.println("The list: " + values.toString);
然后您可以删除 ResultSet
的使用,因为它将毫无用处。
希望对您有所帮助。