使用 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 的使用,因为它将毫无用处。

希望对您有所帮助。