我的结果集明明有数据,怎么不能滚动呢?

ssh78 2004-04-28 02:48:05
rs = sqlP.executeQuery();
rs.last();

我用监视得到的sql语句在数据库端试,得到结果有9万多条。
可是程序执行到rs.last();竟然报错“
java.sql.SQLException: [IBM][JDBC Driver] CLI0627E 结果集不可滚动”。
为什么我的结果集明明有数据,怎么不能滚动呢?
...全文
73 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssh78 2004-04-29
  • 打赏
  • 举报
回复
我查了我的prepareStatement,发现有2种。
public void prepareStatement(String sql) throws GenericDataSourceException, GenericEntityException {
this.prepareStatement(sql, false, 0, 0);
}

public void prepareStatement(String sql, boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency) throws GenericDataSourceException, GenericEntityException {
if (Debug.verboseOn()) Debug.logVerbose("[SQLProcessor.prepareStatement] sql=" + sql, module);

if (_connection == null) {
getConnection();
}

try {
_sql = sql;
_ind = 1;
//add by gary at 2003-12-01
synchronized(this)
{
if (specifyTypeAndConcur) {
_ps = _connection.prepareStatement(sql, resultSetType, resultSetConcurrency);
} else {
_ps = _connection.prepareStatement(sql);
}
}
} catch (SQLException sqle) {
throw new GenericDataSourceException("SQL Exception while executing the following:" + sql, sqle);
}
}
能告诉我第2种怎么用么?boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency不太明白
jinsfree 2004-04-29
  • 打赏
  • 举报
回复
prepareStatement(String sql, boolean specifyTypeAndConcur, int resultSetType, int resultSetConcurrency)
试一试
prepareStatement(String sql, true, 1, 1)
没有用过,不过你把各种组合都试一试,应该可以
nwsl 2004-04-28
  • 打赏
  • 举报
回复
last
public boolean last()
throws SQLExceptionMoves the cursor to the last row in this ResultSet object.

Returns:
true if the cursor is on a valid row; false if there are no rows in the result set
Throws:
SQLException - if a database access error occurs or the result set type is TYPE_FORWARD_ONLY
Since:
1.2
//the result set type is TYPE_FORWARD_ONLY时会抛出异常。所以应该把result set类型给改成直接访问最后一个row的。
ssh78 2004-04-28
  • 打赏
  • 举报
回复
我的调用关系如下:
performSearchCsc(...)
{
......
ResultSet rs = null;
try
{
rs = InventoryDao.searchCscAll(delegator, fields);
WriteData(rs);
}
......
}
public static ResultSet searchCscAll(...)
{
写sql语句;
rs = sqlP.executeQuery();//得到查询结果,有数据。
return rs;
}
private void WriteData(ResultSet rs)
{
....
while (rs.next()){}
.... {
}
目前,在searchCscAll()里面用rs.next()是没有问题的。
在performSearchCsc()里用rs.next()也是没有问题的。
但是在private void WriteData(ResultSet rs)里用rs.next()就抱错
“COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] CLI0125E 函数顺序错误。 SQLSTATE=HY010”
ssh78 2004-04-28
  • 打赏
  • 举报
回复
有rs.next()的,我也可以执行rs.next()。但是将rs return回调用它的方法,就不能用rs.next()了。这是什么原因呢?
ssh78 2004-04-28
  • 打赏
  • 举报
回复
我查查去,一会告诉你们阿
judyhui7612 2004-04-28
  • 打赏
  • 举报
回复
是啊,肯定有setType之類的方法,默認的隻可用rs.next();
mickey_uuu 2004-04-28
  • 打赏
  • 举报
回复
你看看SQlProcessor 或者prepareStatement方法 肯定有设置结果集类型的
ssh78 2004-04-28
  • 打赏
  • 举报
回复
我不是通过这种方式连的数据库阿,是通过ofbiz,如下:
String helper = delegator.getEntityHelperName("Product");
SQLProcessor sqlP = new SQLProcessor(helper);
StringBuffer query = new StringBuffer();
ResultSet rs = null;
try{
sqlP.prepareStatement(sqlString);
rs = sqlP.executeQuery();
}catch{.....}
kevinliuu 2004-04-28
  • 打赏
  • 举报
回复
stmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧