如何从 getMetaData.getColumns() 返回可滚动的结果集?

Posted

技术标签:

【中文标题】如何从 getMetaData.getColumns() 返回可滚动的结果集?【英文标题】:How to return a scrollable result set from getMetaData.getColumns()? 【发布时间】:2018-07-17 01:59:38 【问题描述】:

我需要从下面的代码中返回一个可滚动的结果集:

ResultSet columnMetaData = connection.getMetaData().getColumns(null, null, "my_table", "%");

但是,getColumns() API 似乎无法让我说出我希望ResultSet 成为哪种结果集类型。它只返回一个TYPE_FORWARD_ONLY 结果集。我发现创建可滚动结果集的唯一示例涉及创建Statement。但是我只能从Connection 对象而不是Statement 中获取DatabaseMetaData 对象(从而调用getColumns 方法)。

有谁知道通过调用getColumns() 返回可滚动结果集的方法吗?

顺便说一下,上面的代码是配合xerial的SQLite JDBC Driver使用的。

【问题讨论】:

【参考方案1】:

你不能。 JDBC 规范明确指定元数据结果集需要为TYPE_FORWARD_ONLY。请参阅JDBC 4.3 Specification,7.5 SQL 对象及其属性部分

DatabaseMetaData 返回的ResultSet 对象 方法的敏感性为TYPE_FORWARD_ONLY,并发性为 CONCUR_READ_ONLYResultSet.getHoldability 可以调用 将返回的ResultSet 对象的可持有性确定为 默认保持性由实现定义。

您没有解释为什么需要它是可滚动的,但您要么需要将其转换为列表,要么将其包装在 CachedRowSet 中。

【讨论】:

感谢您的帮助,马克。我将尝试按照您的建议将 ResultSet 转换为列表。

以上是关于如何从 getMetaData.getColumns() 返回可滚动的结果集?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?