1 2 3 4 下一页 开门见山把产生问题的原因的解决办法列出来。 我们一般获取 Statement 都是通过 conn.createStatement() 方法,很少传递参数给它的,所以其内置属性都取默认值的,取记录只用 while(rs.next()) 逐个取即可。然而有一个需求(Oracle 8i 之前的版本不支持子查询排序,所以无法用 rownum 取分页记录) 是通过如下代码来得到 Statement:
由它获得的结果集可以 rs.absolute(n) 直接跳到第 n 行记录来获得值,但就这个用法出问题了,取出来的中文出现乱码了,如 "无效",变成了 "0xE697A0E69588" 原因是我用的 Oracle 驱动版本太低了,是 8.1.6 的驱动版本,只要换成 8.1.7 或更高的驱动版本就可以正常取得中文字段值了。 问题及解决就上面那几行描述,当问题解决后再回望一下,确是如此之简单。OK,你可以跳到其他你喜爱的页面了。倘若有兴趣的话,下话是我记述的这一问题产生及解决的整个历程。在如此简单的解决办法面前似乎不值的长提,但毕竟颇费了一番周折,仅此。 公司有一个 Web 项目是用的 Oracle 驱动 classes12.zip 自带的连接池实现 oracle.JDBC.pool.OracleConnectionCacheImpl,因为数据库是 Oracle 8.0.5,还不是 8i,所以不支持子查询排序,当有 order by 时便不能用 rownum 来分页查询。 原来在处理有排序的记录集的分页显示是把所有记录全部 next 成一个一个对象放在 List 中,然后根据页面要求显示的记录段从 list 中取子集。这无疑效率是非常的低下,每一次翻页都是很考验人耐心的,河量的数据也将是不可思义的。用代码演示就是: (责任编辑:admin) |