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

我在使用 ResultSet 呈现数据时出错。我遇到了这个错误 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

【问题讨论】:

    标签: java sql jdbc callable-statement


    【解决方案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(","));
    • 编辑了答案。希望这是您所需要的。
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2020-09-09
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多