Java Sybase和jdbc-Proc返回select语句-无法获取记录

Java Sybase和jdbc-Proc返回select语句-无法获取记录,java,stored-procedures,jdbc,sybase,Java,Stored Procedures,Jdbc,Sybase,我正在从jdbc执行一个存储过程。该过程通过select查询返回由键和值两列组成的表“out_table”的内容 我正在使用 String query = "{? = call my_proc}"; try { stmt = conn.prepareCall(query); stmt.registerOutParameter(1, Types.JAVA_OBJECT); boolean results = stmt.execute(); while (r

我正在从jdbc执行一个存储过程。该过程通过select查询返回由键和值两列组成的表“out_table”的内容

我正在使用

String query = "{? = call my_proc}";
    try {
    stmt = conn.prepareCall(query);
    stmt.registerOutParameter(1, Types.JAVA_OBJECT);
    boolean results = stmt.execute();

    while (results) {
        ResultSet rs = stmt.getResultSet();
        if(rs.next()) {
            System.out.println(rs.getString("MSG"));
            System.out.println(rs.getInt("SEQ"));
        }
    }
我不能得到任何结果。我可以看到很多示例,它们只从proc返回一个表的单个字段,而不是整个表。“Types.JAVA_OBJECT”类型,我不确定该使用什么。对我来说,输出表字段分别是string和int

我做错了什么

注意:我的程序:

创建过程my_proc 像 开始 创建表格tmp_表格 MSG VARCHAR255, 序号INT //将内容插入tmp_表 .. .. .. 按顺序从tmp_表中选择* 终止 去
存储过程没有out参数。它会生成一个结果集。因此,您应该删除调用中的out参数定义:

String query = "{call my_proc}";
try (CallableStatement stmt = conn.prepareCall(query)) {
    boolean results = stmt.execute();
    while (true) {
       if (results) {
           // results true means: result is ResultSet
           try (ResultSet rs = stmt.getResultSet()) {
               if(rs.next()) {
                   System.out.println(rs.getString("MSG"));
                   System.out.println(rs.getInt("SEQ"));
               }
           }
       } else {
           // results false means: result is update count
           // or no more results if updateCount is -1
           int updateCount = stmt.getUpdateCount();
           if (updateCount == -1) break;
           // Do something with update count
       }
       // Move to next result
       results = stmt.getMoreResults()
    }
 }
我添加了try-with-resource以在使用完资源后立即正确关闭资源,我还添加了代码以正确处理多个结果,包括更新计数,如果存储过程不使用SET-NOCOUNT-ON,这在Sybase和SQL Server中尤其复杂。您的原始代码也有一个无限循环


请注意,如果表中可以有多个结果,ifrs.next可能需要为而rs.next。

存储过程是否返回了一些内容?您可以发布存储过程的代码吗?