Statement的一个很怪很怪的问题,请高手过来看看~

zxxitsoft 2006-04-17 11:32:19
我用的是oracle9i数据库,Weblogic服务器,开发工具是Eclipse3.1
有一个表t_1有一个字段 rowno
insert into t_1 values(1);
insert into t_1 values(2);
insert into t_1 values(3);
.
.
.
insert into t_1 values(6000);
写入6000条记录
然后用下面的语句读出记录:

Statement stmt = null;
ResultSet rs =null;
stmt = this.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery("select * from t_1");
while(rs.next()){
System.out.println(rs.getRow() + " " + rs.getString(1));
}


您会发现第2049条记录读出来的是数据库中第一条记录的值。第2048和2050读出来的值确都是正常的,这个问题我试个多种方法都没有解决!
不知道有没有人碰到过同样的问题,是怎么样解决的。

另外说明,如果把
stmt = this.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
这句换成
stmt = this.conn.createStatement();
将没有问题。



...全文
139 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zxxitsoft 2006-04-18
问题已经解决了,确实是驱动的问题,我换成oracle 自带的驱动就没问题了,之前我用的是weblogic提供的驱动
  • 打赏
  • 举报
回复
xuyingjun 2006-04-18
JDBC 2.0 有 core package 和 optional package, Oracle 不是支持所有的 package.
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
很可能 Oracle 没有支持这些 API, 查看一下 Driver 的 readme
  • 打赏
  • 举报
回复
xuyingjun 2006-04-18
Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);

  该Statement取得的ResultSet就是可滚动的
可能是数据缓存的问题,不是很清楚
  • 打赏
  • 举报
回复
xuyingjun 2006-04-18
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY是jdbc2.0的标准
  • 打赏
  • 举报
回复
dp_555 2006-04-18
友情接分。。。
  • 打赏
  • 举报
回复
terry_yip 2006-04-18
综合楼主和五楼的说法,我觉得是驱动程序有问题。
  • 打赏
  • 举报
回复
SDMRauquin 2006-04-18
我和lz的有些区别 我用的是PreparedStatement qs = con.prepareStatement(sqlStr1);

几百页中,倒数的10几页到20几页 查询的结果都一样。开始的几百页倒是正常。
  • 打赏
  • 举报
回复
yuzl32 2006-04-18
有这种情况?
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
申请成为版主
帖子事件
创建了帖子
2006-04-17 11:32
社区公告
暂无公告