使用 ResultSet 呈现数据时出错

Posted

技术标签:

【中文标题】使用 ResultSet 呈现数据时出错【英文标题】:Error in rendering data using ResultSet 【发布时间】:2016-10-08 04:18:05 【问题描述】:

我在。我遇到了这个错误 java.sql.SQLException: ResultSet is from UPDATE。没有数据。 这是我的代码 sn-p

    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 的输出为 null 并给我 java.sql.SQLException: ResultSet is from UPDATE。没有数据。 错误。请帮忙谢谢。

编辑 我使用 callableStatement.getString(4);callableStatement.getString(5);callableStatement.getString(6);

检查了每个参数的 System.out

输出为:42141 000 126

【问题讨论】:

【参考方案1】:

您的 OUT 参数的结果,在您的 callableExecution.executeQuery() 之后应该在 callableStatement 变量中。

要在执行后获取它们,您必须按其类型获取,如下所示:

String valueForOutput4 = callableStatement.getString(4);
String valueForOutput5 = callableStatement.getString(5); 
String valueForOutput6 = callableStatement.getString(6);

我假设您希望将所有 27 个固定参数传递给列表中的TINChkSP 数据库函数/过程。 我假设它们都是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 的使用,因为它没有用。

希望对你有帮助。

【讨论】:

感谢您的回答。是的,我已经尝试过了,它奏效了!但我需要的是他们的名单。我怎样才能把它们放在数组列表中?我可以从 1 到 1 获取值,但是还有其他方法可以获取值列表吗?我知道 resultSet 是一种方式,但它对我不起作用,因为 java.sql.SQLException:ResultSet 来自 UPDATE。没有数据。错误:( ResultSet 没有数据,因为它正在调用函数/过程。您是否在 OUT 参数中一一看到您的值?他们看起来怎么样?也许您可以在问题中添加它,以便我检查并尝试帮助您。简而言之,我想您可以将它们拆分并放入列表中。 是的,我可以获得输出参数的值。嗯,我怎样才能拆分它们并将它们放入列表中? 请在问题的末尾添加您从要迭代的 OUT 参数中获得的字符串。如果它被逗号分隔,你可以这样做: List items = Arrays.asList(outputParameter4.split(",")); 编辑了答案。希望这是您所需要的。

以上是关于使用 ResultSet 呈现数据时出错的主要内容,如果未能解决你的问题,请参考以下文章

显示 ResultSet 中的自动编号字段时出错

使用 express 和 axios 反应应用程序在呈现数据时出错

重新呈现视图控制器时出错

以模态方式呈现 UIImagePickerController 时出错

呈现静态 html 时出错

如何防止尝试在已经呈现的控制器上呈现控制器时出错?