ResultSet的问题,请各位大侠指教,小生感激涕零
我初学JSP,下面这个问题快使我疯掉了,请各位高手指点。
先说环境:
Tomcat 5.0.30 + Lomboz 3.0.1 + Eclipse 3.0.1 + j2sdk 1.4.2.07
采用JDBC + ODBC连接Access 2003数据库,下面语句中的rs由Statement执行一个查询语句返回(这部分没有问题)。
出差语句是:
while (i < pageSize && rs.next()) {
out.println("<tr>\n<td height=\"20\" valign=\"middle\" bgcolor=\"#FFFFFF\" class=\"style5\">");
out.println(rs.getString("title") + "</td>\n<td height=\"20\" align=\"center\" valign=\"middle\" bgcolor=\"#FFFFFF\" class=\"style5\">");
out.println(rs.getString("doc_id") + "</td>\n<td height=\"20\" align=\"center\" valign=\"middle\" bgcolor=\"#FFFFFF\" class=\"style5\">");
out.println(dateFormat.format(rs.getDate("issue_date")) + "</td>\n</tr>");
}
如果我将while改成if,只输出一个记录没有问题。
系统提示的信息:
javax.servlet.ServletException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.publicArea_jsp._jspService(publicArea_jsp.java:162)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态
sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.SQLGetDataInteger(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getDataInteger(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getInt(Unknown Source)
org.apache.jsp.publicArea_jsp._jspService(publicArea_jsp.java:129)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
问题点数:100、回复次数:16Top
1 楼larson001(斗士)回复于 2005-04-04 18:44:20 得分 0
你的Statement对象可是这样写的?
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
另,while循环里怎么没见你写i++?Top
2 楼zhutouzip(醒了的鸟)回复于 2005-04-04 18:56:36 得分 0
我看着就是i没有变,其它没问题啊?
看不出来啊,如果i<pagesize一直成立的话,相当于while变成while(rs.next())啊,应该没问题啊!Top
3 楼jaccheu(我在故你快乐)回复于 2005-04-04 19:23:04 得分 0
larson001:
你好!
不好意思,i++有的,这里忘了。
Statement是这样写的:stmt = conn.createStatement();Top
4 楼syliang2003(祝天下有情人终成扣肉)回复于 2005-04-04 19:30:48 得分 0
java与html混合写?????
这是非常不科学的!
java还JAVA,HTML还HTML,分开好一点!Top
5 楼zhutouzip(醒了的鸟)回复于 2005-04-04 19:33:31 得分 10
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
这样写只影响last()方法,楼主的代码能不能贴完整点!Top
6 楼jaccheu(我在故你快乐)回复于 2005-04-06 11:38:42 得分 0
TO: 101
前面的代码如下,很简单的。
String DB_CONNECTION_STRING = "jdbc:odbc:test";
String dbDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
String sql;
try {
Class.forName(dbDriver);
connection = DriverManager.getConnection(DB_CONNECTION_STRING);
statement = connection.createStatement();
sql = "SELECT * FROM test";
rs = statement.executeQuery(sql);
}
catch(ClassNotFoundException e) {
System.err.println("Error loading driver: " + e);
}
catch(SQLException e) {
e.printStackTrace();
}
Top
7 楼drugon(更高,更远,更强)回复于 2005-04-06 11:57:29 得分 0
这些信息还是看不出来,你把TOMCAT里面的logs信息粘出来。Top
8 楼jaccheu(我在故你快乐)回复于 2005-04-06 13:39:16 得分 0
To drugon(更高,更远,更强) :
logs信息如上述问题描述Top
9 楼zhutouzip(醒了的鸟)回复于 2005-04-06 13:56:24 得分 0
换成if真的能打印出一条结果?
我怎么横看竖看出了i的只需要变外,就是没错啊!Top
10 楼escalj(天行健,君子以自强不息)回复于 2005-04-06 14:11:52 得分 0
你确认真正出问题的就是这段代码么?我是说,你的while循环之后还有内容么?如果还有rs.get××() 之类的代码,那就千万别忘设好rs的指针状态。
感觉如果换成if没问题的话那就可能是这个原因了。
Top
11 楼icewhite(默涵)回复于 2005-04-06 14:17:59 得分 0
你先rs.next()打印一下看看Top
12 楼appleangle(苹果熟了)回复于 2005-04-06 14:26:07 得分 0
upTop
13 楼DanielYWoo(绿色毒汁)回复于 2005-04-06 15:32:48 得分 0
tomcat 5 可以用jdk142跑阿?我还以为只能用jdk15呢Top
14 楼jaccheu(我在故你快乐)回复于 2005-04-06 18:06:14 得分 0
TO 101:
换成if是能打印出一条记录来,如果只有一条记录,输出一条记录后我用if测试rs.next()返回的就是false。但用while就是报错,真的很奇怪。(i不需要考虑,没有影响)Top
15 楼jaccheu(我在故你快乐)回复于 2005-04-07 11:21:38 得分 0
TO escalj(吹尽狂沙始到金) :
我将while()语句块内容全部注释掉还是同样的问题。Top
16 楼lavendergo( 王者归来)回复于 2005-04-07 12:50:38 得分 90
检查一下你数据库里所有字段的记录是不是都是非空的!!Top




