rs.getString(1) 不能用两次吗?
如下 :我想让 rs.getLong(1) 输出两遍,一次最前面,一次最后面。
可是 不行,去了最后一句 就可以。不知道为什么??
while(rs.next())
{
out.print("<tr>");
out.print("<td width=100>"+rs.getLong(1)+"</td>");
out.print("<td width=50>"+rs.getString(2)+"</td>");
out.print("<td width=100>"+rs.getString(3)+"</td>");
out.print("<td width=50>"+rs.getInt("user_age")+"</td>");
out.print("<td width=50>"+rs.getString("user_sex")+"</td>");
out.print("<td width=100>"+rs.getString("user_address")+"</td>");
out.print("<td width=100>"+rs.getString("user_telephone")+"</td>");
out.print("<td width=100>"+rs.getString("user_addtime")+"</td>");
out.print("<td width=100>"+rs.getLong(1)+"</td>");//------
out.print("</tr>");
}
问题点数:20、回复次数:25Top
1 楼luobo525(天津拼客网(www.pktj.net))回复于 2006-07-09 17:02:01 得分 0
默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行
---------------------
最好是放到一个变量中,反复用Top
2 楼trumplet(检查)回复于 2006-07-09 17:04:03 得分 0
不应该。
有什么错误信息吗?Top
3 楼aChinese(一个中国人)回复于 2006-07-09 17:08:56 得分 0
好象是微软的驱动有这毛病, 用jtds.
out.print是IO操作,极慢, 你这样占用了连接很久
不能这么干, 应该把数据读出来后放入集合中, 然后立即释放连接.
List result = new ArrayList();
while(rs.next())
{
User u = new User(); //一个dto
u.setAge(rs.get(user_age));
....把数据都放进dto
result.add(u); // dto放进list
}
然后, 关闭数据库连接
接下来, List中数据你爱怎么读就怎么读Top
4 楼corrupt(喜欢 睡在床板下 的思考)回复于 2006-07-09 17:21:37 得分 0
恩。也只能如此了。。Top
5 楼aChinese(一个中国人)回复于 2006-07-09 21:46:53 得分 0
不是只能如此,是必须如此. 这么做不是为了解决你这个问题, 而是不占用宝贵的连接Top
6 楼sime59(天涯浪者)回复于 2006-07-09 21:56:39 得分 0
晕了 我用JDBC从没遇到那个问题啊 可以2次取RS的啊Top
7 楼marine_chen(覆雨翻云)回复于 2006-07-09 23:10:13 得分 0
可以那么取,理论上没问题,不过设个变量就更好了!
放在bean里用List取也不错。Top
8 楼chg2008(岂能尽如人意,但求无愧我心!)回复于 2006-07-09 23:17:56 得分 0
不可以Top
9 楼sdxlh007(海)回复于 2006-07-09 23:23:16 得分 0
应该是可以的啊,把出错信息发上来看看Top
10 楼treeway(趣玩—Trek-Seeking My Way)回复于 2006-07-09 23:34:11 得分 0
可以的Top
11 楼huxinsheng168(望M止渴)回复于 2006-07-10 08:15:10 得分 0
你有两条记录就用两次,有三条记录就用三次,有N+1条记录,就用N次。Top
12 楼YiYaYo()回复于 2006-07-10 08:44:10 得分 0
rs.getString(1)...
它只能一步一步的往下走..不可能再从回到第一个去走...
它只走一遍...从1走到2走到3...不可能直接回到1重新来过...Top
13 楼kevinliuu()回复于 2006-07-10 08:47:27 得分 0
rs.getString(1)...
它只能一步一步的往下走..不可能再从回到第一个去走...
它只走一遍...从1走到2走到3...不可能直接回到1重新来过...
rightTop
14 楼ray_1981(雷)回复于 2006-07-10 08:58:19 得分 0
放到一个变量中,就可以反复用了!Top
15 楼YiYaYo()回复于 2006-07-10 09:01:22 得分 0
ray_1981(雷)
放到一个变量中,就可以反复用了!
---------------------------------------------------------------------------------
这谁都知道...
可如果值起变化的话呢..?Top
16 楼eric8376(风不平)回复于 2006-07-10 09:22:53 得分 0
不能Top
17 楼risa_meng()回复于 2006-07-10 15:32:57 得分 0
对啊,不能使用两次
不可以回头再查已经过去的数据了的Top
18 楼mastermind(北纬49度的雨)回复于 2006-07-11 17:34:48 得分 0
这应该和JDBC的版本有关系.尝试一下用连接池应该不会出现这个问题Top
19 楼guzuoshantou(孤小小)回复于 2006-07-11 20:56:22 得分 0
可以把记录集的类型改成可前后移动的,
在创建statement对象时确定resultSet的类型,
Statement st=connectin.creatStatement(xxx,xxx);
ResultSet rs=st.excuteQuery(sql);
那两个xxx忘记是什么了,是两个整型常量,自己去查一下;Top
20 楼cs_bs()回复于 2006-07-11 21:28:55 得分 0
你可以用Preperstatment对象,他好象可以.Top
21 楼cs_bs()回复于 2006-07-11 21:31:24 得分 0
还有楼上说的肯定是对的,创建st对象传两个参数的确是可以改变指针的位置Top
22 楼JaredJared()回复于 2006-07-11 22:01:34 得分 0
指定ResultSet为ResultSet.TYPE_SCROLL_INSENSITIVE就可以了。Top
23 楼King6860()回复于 2006-07-12 11:31:50 得分 0
楼主用的 连接协议不知道是不是 JDBC:ODBC 。。
如果是,建议使用其他的驱动。。
我使用 JDBC:ODBC 的时候,也遇到过这样的问题。。。Top
24 楼jackson416(鬼鬼 | 问世间小裤衩是何物,为何.....)回复于 2006-07-12 11:47:22 得分 0
你可以将指针返回到首位rs.beforeFirst();
再取rs.getLong(1)Top
25 楼bingohu(小样你新来的吧)回复于 2006-07-12 16:38:14 得分 0
while(rs.next())
{
long str = rs.getLong(1);
out.print("<tr>");
out.print("<td width=100>"+ str +"</td>");
out.print("<td width=50>"+rs.getString(2)+"</td>");
out.print("<td width=100>"+rs.getString(3)+"</td>");
out.print("<td width=50>"+rs.getInt("user_age")+"</td>");
out.print("<td width=50>"+rs.getString("user_sex")+"</td>");
out.print("<td width=100>"+rs.getString("user_address")+"</td>");
out.print("<td width=100>"+rs.getString("user_telephone")+"</td>");
out.print("<td width=100>"+rs.getString("user_addtime")+"</td>");
out.print("<td width=100>"+ str +"</td>");//------
out.print("</tr>");
}
这样行不
Top




