Java Sybase和jdbc-Proc返回select语句-无法获取记录
我正在从jdbc执行一个存储过程。该过程通过select查询返回由键和值两列组成的表“out_table”的内容 我正在使用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
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。存储过程是否返回了一些内容?您可以发布存储过程的代码吗?