直到今天,我还在ResultSet处理查询结果时.但今天我读了一些关于RowSet并且CachedRowset我意识到他们可以更好地服务于我的目的.而在所有的例子我读到这里RowSet和CachedRowSet被简称为对象,当我尝试过自己在我的代码,我意识到那些接口,并在他们的例子使用这些接口的一些实现.
现在我的问题是我在哪里找到这些实现,是否有官方的东西?
我需要下载它们还是它们带有JDK?
我正在调查javax.sql.rowset.CachedRowSet在我的应用程序的一部分中使用,但是我只能找到有关使用专有sun实现com.sun.rowset.CachedRowSetImpl或Oracle特定实现的信息.
sun实现不受支持且可能会发生变化.如果我希望将来部署到非Sun虚拟机,使用它也可能会导致问题,最后它会在我们的构建日志中留下不可抑制的警告,这可能会掩盖其他警告.
是否有一个开源替代实现,我可以使用我的应用程序部署,这将在多个数据库中正常工作?至少支持MySQL的东西.
我正在使用CachedRowSet来保存ResultSet表单DB.根据一些演示代码:我写下面的代码:
CachedRowSetImpl crs = new CachedRowSetImpl();
Run Code Online (Sandbox Code Playgroud)
但是eclipse提示我CachedRowSetImpl无法解析为一个类型.所以我知道我需要导入一些包.但我不知道要导入哪一个?有谁知道?
我正在查询可能会发生变化的视图中的数据.在我做之前我需要知道列是否存在crs.get******().我发现我可以查询这样的元数据,以便在我从中请求数据之前查看列是否存在.
ResultSetMetaData meta = crs.getMetaData();
int numCol = meta.getColumnCount();
for (int i = 1; i < numCol+1; i++)
if(meta.getColumnName(i).equals("name"))
return true;
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来检查列是否存在?
编辑:它必须是数据库不可知的.这就是我引用CachedRowSet而不是数据库的原因.
我想编写一个java函数,它接受一个SQL查询并返回一个ResultSet以便在别处进行处理.一旦连接关闭,ResultSet就会死机,因此无法完成此操作.
谷歌搜索我发现了一篇非常古老的(2004)OReilly文章,看起来像是治愈了:CachedRowSet.您只需放入ResultSet,CachedRowSet保存数据,让您关闭连接并使用返回的CachedRowSet在其他地方播放数据.
本文引用了Sun的CachedRowSet实现,似乎无处可寻.
现代javadocs(适用于Java 1.5及更高版本)似乎具有相同名称的"CachedRowSet",它不仅仅是ResultSet数据的持有者."CachedRowSet"似乎通过获取连接和其他所有内容来完成整个数据库处理.
那个"CachedRowSet"和旧文章中谈到的一样吗?
我想要一些简单的东西,比如旧文章.在连接关闭后将ResultSet放入进行处理的东西.
有这样的动物吗?
谢谢
在我的 java 代码中,我使用 select 语句访问 Oracle 数据库表。我收到很多行(大约 50.000 行),因此rs.next()需要一些时间来处理所有行。
using ResultSet, the processing of all rows (rs.next) takes about 30 secs
Run Code Online (Sandbox Code Playgroud)
我的目标是加快这个过程,所以我更改了代码,现在使用CachedRowSet:
using CachedRowSet, the processing of all rows takes about 35 secs
Run Code Online (Sandbox Code Playgroud)
我不明白为什么CachedRowSet比普通的慢ResultSet,因为CachedRowSet一次检索所有数据,而每次调用ResultSet时检索数据。rs.next
这是代码的一部分:
try {
stmt = masterCon.prepareStatement(sql);
rs = stmt.executeQuery();
CachedRowSet crset = new CachedRowSetImpl();
crset.populate(rs);
while (rs.next()) {
int countStar = iterRs.getInt("COUNT");
...
}
} finally {
//cleanup
}
Run Code Online (Sandbox Code Playgroud) 对于以下代码段,出现以下给定错误:
try {
cRows = new CachedRowSetImpl();
while(cRows.next())
{
MyClass myClass = new MyClass();
myClass.setPrevDate(cRows.getDate("PREV_DATE")); // In debug mode, the error was throwing when I press Resume from here.
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date
Run Code Online (Sandbox Code Playgroud)
在数据库中,该列的数据类型DATE仅为。我不知道这里要到哪里Timestamp。
我正在尝试在执行查询后关闭连接.之前,我只是创建一个CachedRowSetImpl实例,它将负责为我释放资源.但是,我正在使用Hadoop项目的Hive数据库驱动程序.它不支持CachedRowSetImpl.execute().我想知道是否有其他方式可以让我复制ResultSet对象并关闭连接?