非常怪的问题???

园艺爱移动 2001-11-13 07:41:52
各们大虾在写jsp时,出现了一个问题:
对数据查询后,返回结果集 ResultSet r = dbcon.executeQuery(sqlstr);
而对 r.last(); 不能运行 出错显示:
java.sql.SQLException: 对只转发结果集的无效操作: last
请问那们大虾帮助解决一下,第一个提供有效解决方案都加20分(必给分)
第二个提供有效解决方案都加9分(必给分)
注:我只能给29分。不名够以后再补。
在此先谢过
...全文
98 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
园艺爱移动 2001-11-15
to: zxwcq(小马): 我后来已经发现了这个错误但又有新情况了.
做数据库查询时 我使用的 ORACLE 的 jdbc它默认的是 : stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY ); 只能对数据库游标做向下操作,不能使用游标向上,也能使用游标定位操作。
如果设置 stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );从数据库提取的数据,汉字变为乱码,而英文和数字都正常,我使用了 str1 = new String(str.getBytes("ISO8859_1"),"gb2312");也不能正常。希望各位高手看一下。
使用javabean 从数据库中取数据,使用System.out.println();输出汉字变为乱码:
如: 管理员:(输出为) 0xE7AEA1E79086E59198
回复
zxwcq 2001-11-15
你的结果集那时采用的什么类型的?要实现你的功能只能用滚动敏感(Scroll-sensitive)这种类型
其方法是:
Statement s=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
回复
mechiland 2001-11-14
r.last() 返回的是boolean类型,与你想要的纪录集类型是完全不同的.如果你想取得最后一条纪录,你可以在sql 语句中更改查询顺序.(order by).
回复
园艺爱移动 2001-11-14
真的没人知道吗>????????????????????????
回复
园艺爱移动 2001-11-14
没人可以回答吗????
回复
园艺爱移动 2001-11-14
不是空集,r.next()可以用,而且能正确取值.
回复
firetree 2001-11-14
是不是你取出的结果集是空的阿?
先用r.next()或r.wasNull()判断一下
回复
园艺爱移动 2001-11-14
而且就是使用
if(r.last()){}
系统还是报错:
java.sql.SQLException: 对只转发结果集的无效操作: last
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.driver.BaseResultSet.last(BaseResultSet.java:75)
at ereport.SelBean.return_data(SelBean.java:333)
at src.ereport._0002fsrc_0002fereport_0002fsearchresult_0002ejspsearchre
sult_jsp_0._jspService(_0002fsrc_0002fereport_0002fsearchresult_0002ejspsearchre
sult_jsp_0.java:214)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer
vlet.java:177)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
18)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:391)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:4
04)
at org.apache.tomcat.core.Handler.service(Handler.java:286)
at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372
)
at org.apache.tomcat.core.ContextManager.internalService(ContextManager.
java:797)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743
)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnectio
n(HttpConnectionHandler.java:210)
at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:
416)
at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java
:498)
at java.lang.Thread.run(Thread.java:484)

我该怎么办????

回复
园艺爱移动 2001-11-14
我是想取结果集的最后一项,但
r.last() ,
r.previous() ;
r.first() ;
r.absolute() ;
这些方法都不能用,只有r.next()能用,我真的不知道是为什么?
请各位大虾帮帮忙吧!!!
谢谢了.

回复
firetree 2001-11-14
如果我猜得没错的话,你是想取结果集的最后一项吧,
if(r.last()){}
last()方法返回的是一个boolean值
回复
园艺爱移动 2001-11-14
各位大虾帮帮忙吧!!!!!!!!!!!!!!!!!
回复
园艺爱移动 2001-11-14
我的环境是: Win2k Advanced + Jbuilder4+tomcat3.2.3+ORACLE8.1.6
使用javabean 从数据库中取数据,使用System.out.println();输出汉字变为乱码:
如: 管理员:(输出为) 0xE7AEA1E79086E59198
回复
园艺爱移动 2001-11-14
各位大虾,现在又有新的情况了。
我仔细观察后发现了。r.last()必须在
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); 设置的情况下才能使用了。而我使用的 ORACLE 的 jdbc它默认的是 : stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY ); 即只能数据库游标只能向下运行。
但是,我设置完 stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY );后,从数据库提取的数据,汉字变为乱码,而英文和数字都正常,我使用了 str1 = new String(str.getBytes("ISO8859_1"),"gb2312");也不能正常。希望各位大虾看一下,我下面该怎么办????
回复
园艺爱移动 2001-11-13
大虾我要执行r.last();如果把它当作错误处理掉,我的程序就在很大改动。
回复
dsa 2001-11-13
try
{
}
……
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2001-11-13 07:41
社区公告
暂无公告