java - 使用 ResultSet 渲染数据时出错

标签 java sql jdbc callable-statement

我在使用 ResultSet 呈现数据时遇到错误。我遇到此错误 java.sql.SQLException:ResultSet 来自更新。没有数据。 这是我的代码片段

    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);
检查了每个参数的 System.out callableStatement.getString(6);

输出是:
42141
000
126

最佳答案

callableExecution.executeQuery() 之后的 OUT 参数结果应位于 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 的使用,因为它毫无用处。

希望有帮助。

关于java - 使用 ResultSet 渲染数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928631/

相关文章:

mysql - MySQL 修改列错误

java - 找到最小数字的索引

java - 有没有办法忽略 for 循环中的计数器?

sql - 我无法调用sql函数

php - 多对多表SQL选择问题

java - 长时间运行的 CallableStatement 无需等待即可执行

java - 使用 JPA : what queries should I write to get the same result I get in JDBC? 加入

java - 这个简单的字符串转义可以防止任何 SQL 注入(inject)吗?

java - 在java中将html文件存储在字符串中

java - 在不重启的情况下将应用程序部署/部署到Tomcat的陷阱