为了查询 Sybase ASE 中的数据库元数据,我发现这个相关答案(不是公认的答案)是理想的:
如何从 Sybase 数据库获取表描述(字段名称和类型)?
不幸的是,我似乎找不到任何文档,说明我应该如何从 JDBC 调用 sp_help
。根据 文档,sp_help
返回多个游标/结果集。第一个包含有关表本身的信息,第二个包含有关列的信息等。当我这样做时:
PreparedStatement stmt = getConnection().prepareStatement("sp_help 't_language'");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getObject(1));
// ...
}
我只从第一个游标获得结果。如何访问其他的?
In order to query the database meta data in Sybase ASE, I found this relevant answer (not the accepted one), to be ideal:
From a Sybase Database, how I can get table description ( field names and types)?
Unfortunately, I can't seem to find any documentation, how I'm supposed to call sp_help
from JDBC. According to the documentation, sp_help
returns several cursors / result sets. The first one contains information about the table itself, the second one about the columns, etc. When I do this:
PreparedStatement stmt = getConnection().prepareStatement("sp_help 't_language'");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getObject(1));
// ...
}
I only get the results from the first cursor. How to access the other ones?
发布评论
评论(3)
当您有多个结果集时,您需要使用 execute() 方法而不是executeQuery()。
这是一个示例:
When you have multiple result sets you need to use the execute() method rather than executeQuery().
Here's an example:
您还需要调用 getUpdateCount() 和 getMoreResults() 来读取整个结果集。以下是我用来调用 sp_helpartition 从 SYBASE DB 检索分区信息的一些代码。
You also need to call getUpdateCount() as well as getMoreResults() to read the entire result set. Here is some code I used to call sp_helpartition to retrieve partition information from a SYBASE DB.
感谢 Martin Clayton 的回答,我可以弄清楚如何一般性地查询 Sybase ASE 的
sp_help
函数。我在我的 jOOQ 中加入了对多个 JDBC 结果集的支持。对于sp_help
,使用 jOOQ API 调用该函数可能如下所示:Thanks to Martin Clayton's answer here, I could figure out how to query Sybase ASE's
sp_help
function generically. I documented some more details about how this can be done in my blog here. I worked support for multiple JDBC result sets into jOOQ. In the case ofsp_help
, calling that function using the jOOQ API might look like this: