ResultSet的方法总是出错,大家帮忙看看!
分数不多了,只好省省了!
在Bean中,正常的按照顺序查询都没有问题,可是我打算首先计算记录数目,然后分配String数组的空间,可是每次我使用 ResultSet中的方法 .last(),.islast(),first(),isfirst()……这种的方法时,程序都自动跳过后面的语句,同时这个语句也不执行,然后就返回了!
不知道什么原因!
希望大家集思广益,看看都有什么可能!有意者有分!
部分主要源代码如下:
package myclass.util;
import java.sql.*;
import myclass.DB.DataBase; //我的数据库连接Bean
public class TransUtil extends DataBase
{
private Statement stmtTrans = null;
private ResultSet rsTrans = null;
public TransUtil()
{
try
{
stmtTrans = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
}
catch (Exception ex)
{
ex.toString();
}
}
public String[] toid(String bm) throws Exception
{
String[] ids = null;
try
{
setSql("select * from imple_scheme_curr where bm='50018'");
rsTrans = stmt.executeQuery(getSql());
rsTrans.last(); //这句话就不执行了,直接跳到return ids;那句了????
int l = rsTrans.getRow();
int i = 0;
ids = new String[l * 2];
rsTrans.first();
while (rsTrans.next())
{
ids[i] = rsTrans.getString("id");
ids[i + l] = rsTrans.getString("bm");
i++;
}
System.out.println("总数:" + l);
}
catch (Exception ex)
{
ex.toString();
}
finally
{
rsTrans.close();
}
System.out.println("Function toid is over");
return ids;
}
}
问题点数:32、回复次数:17Top
1 楼cen8535(小虫)回复于 2003-12-01 13:59:07 得分 2
如果是通过odbc连数据库的话,结果集只能顺序移动Top
2 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 14:34:25 得分 0
我用的是 SQL Server 2000 的数据库,JDBC的专用驱动!
应该可以随机访问!Top
3 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 14:39:09 得分 0
谢谢!Top
4 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 14:47:44 得分 0
是不是分太少啊!!
在线等呢!!Top
5 楼helloqiner(小勤)回复于 2003-12-01 15:13:55 得分 1
connect 正常吗?
stmt 正常吗?
返回的数据集是空吗?
如果是返回的数据集本身就有问题,我看问题不是出在 rsTrans.last() 这句上,而是只要是操作数据集的语句都不会被执行。你可以将这句话注释掉,随遍加句话与数据库操作无关的代码,单步跟踪看看能不能运行到你新加的语句上。
Top
6 楼romeoswing(swing)回复于 2003-12-01 15:29:24 得分 10
没明白你的程序到底怎么了?把返回的结果说清楚啊,有没有报错?
ResultSet.last()应该是没有问题的,但是你的rsTrans.first();while (rsTrans.next()){}实际上会从第二行开始,不过这应该对流程没有影响。
其实我觉得你这样实现太麻烦了,判断结果集的行数后,再要从头读入一个String[]中,不如直接用一个Vector,不用判断结果集的长度,从头到尾往里头加就行了,当然实际情况我不了解。
Top
7 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 16:39:46 得分 0
谢谢 romeoswing,不过我不是很会用vector,我看看书去!这样应该可以解决。
可是,我就是想弄明白,为什么会出现这样的情况!!
我的数据库服务器是Sql Server 2000,在jsp的相应目录中已经拷贝了jdbc 4 sql server 2.0的包文件,读取数据的时候没有问题,只是在这个地方总是出现异常。
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method: ResultSet.previous
连previous方法都不行,但是next方法可以取数据。
我刚刚查阅了MS SQL Server JDBC的在线文档,发现 prevous , last, islast等等方法都是在 2.0 core版本中才支持。
可是 我在jsp 中使用的包就是 2.0的啊!
而且我还把包文件都反编译了,在BaseResultSet.class文件中存在 last, previous等方法,实在不知道是怎么回事!!
Top
8 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 16:59:08 得分 0
自己UP!!
问题怪怪!!很有挑战性!Top
9 楼flyshp(天堂雨)回复于 2003-12-01 17:08:55 得分 1
问题不是怪!
你首先要自己掌握一套调试的方法!!!
在你认为出错的的方 输出异常的具体信息!
之前 你可以把 sql 的执行语句输出到页面 ! 一步一步的走 最终你会知道问题的所在!!
这种问题 只能靠自己慢慢地调试!!! 我感觉是这样 . . . . . . .Top
10 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 17:17:09 得分 0
现在的问题,是 方法就是不支持。 可是明明装得驱动都没有问题, 1.0版本支持的方法都可以使用。 就是2.0版本的方法不可以,抛出的异常也是显示 Unsupported method: ResultSet.previous, 由错误信息的前面部分可以知道驱动没有问题,可就是这样!
我用的JB 9.0 来做的,方法都应该是标准!!
郁闷!!郁闷!!郁闷!!郁闷!!郁闷!!郁闷!!郁闷!!郁闷!!郁闷!!Top
11 楼lhbf(牧野)回复于 2003-12-01 17:24:31 得分 5
注意你使用的记录集锁类型和光标类型,参考一下数据库编程方面的资料。Top
12 楼pantech_36(~ 25436 ~)回复于 2003-12-01 17:32:41 得分 0
java.sql.Statement stmtsearch=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql="select LEFT(a.ClsId,1) as ClsId_P,m.NAME,sum(a.countA) as total,a.pdatetimes from vistataa as a right join vimain as m on ( LEFT(m.ClsId,1)=LEFT(a.ClsId,1) and RIGHT(m.ClsId,1)='0' ) where LEFT(pdatetimes,8) >= '"+fromyear+frommonth+fromday+"' and LEFT(pdatetimes,8)<='"+toyear+tomonth+today+"' and m.ClsId!='00' group by LEFT(a.ClsId,1),m.NAME,a.pdatetimes HAVING sum(a.countA) >0 order by pdatetimes asc,ClsId_P asc";
//out.print(sql);
ResultSet rslist=stmtsearch.executeQuery(sql);
rslist.last();
int count=rslist.getRow(); Top
13 楼lhbf(牧野)回复于 2003-12-01 18:07:56 得分 0
要使记录集可滚动,应该是用ResultSet.TYPE_SCROLL_INSENSITIVE,你不妨试试看。Top
14 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 18:24:02 得分 0
呵呵!
如果我非要用 ResultSet.TYPE_SCROLL_SENSITIVE 来滚动,行吗?
HIA HIA !Top
15 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 18:25:12 得分 0
To: pantech_36(~ 25436 ~)
我的rslist.last();用不了!抛出异常!Top
16 楼lyqq(曾经是菜,现在还是菜!)回复于 2003-12-01 19:26:51 得分 0
问题差不多解决了,我的Sql语句用了两次,就可以计数了。
但是这个问题为什么出现不能支持 .last()和 .first()方法,还是不知道为什么!Top
17 楼keylee94(阿悦)回复于 2003-12-01 19:45:41 得分 13
应该就是驱动问题,试验一下把驱动拷贝到jb的目录中!Top




