ResultSet的问题,请各位大侠指教,小生感激涕零

我在故你快乐 2005-04-04 06:27:06
我初学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)

...全文
222 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lavendergo 2005-04-07
  • 打赏
  • 举报
回复
检查一下你数据库里所有字段的记录是不是都是非空的!!
我在故你快乐 2005-04-07
  • 打赏
  • 举报
回复
TO escalj(吹尽狂沙始到金) :
我将while()语句块内容全部注释掉还是同样的问题。
drugon 2005-04-06
  • 打赏
  • 举报
回复
这些信息还是看不出来,你把TOMCAT里面的logs信息粘出来。
我在故你快乐 2005-04-06
  • 打赏
  • 举报
回复
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();
}
我在故你快乐 2005-04-06
  • 打赏
  • 举报
回复
TO 101:
换成if是能打印出一条记录来,如果只有一条记录,输出一条记录后我用if测试rs.next()返回的就是false。但用while就是报错,真的很奇怪。(i不需要考虑,没有影响)
DanielYWoo 2005-04-06
  • 打赏
  • 举报
回复
tomcat 5 可以用jdk142跑阿?我还以为只能用jdk15呢
appleangle 2005-04-06
  • 打赏
  • 举报
回复
up
icewhite 2005-04-06
  • 打赏
  • 举报
回复
你先rs.next()打印一下看看
escalj 2005-04-06
  • 打赏
  • 举报
回复
你确认真正出问题的就是这段代码么?我是说,你的while循环之后还有内容么?如果还有rs.get××() 之类的代码,那就千万别忘设好rs的指针状态。
感觉如果换成if没问题的话那就可能是这个原因了。
飞行的兔子 2005-04-06
  • 打赏
  • 举报
回复
换成if真的能打印出一条结果?
我怎么横看竖看出了i的只需要变外,就是没错啊!
我在故你快乐 2005-04-06
  • 打赏
  • 举报
回复
To drugon(更高,更远,更强) :
logs信息如上述问题描述
飞行的兔子 2005-04-04
  • 打赏
  • 举报
回复
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
这样写只影响last()方法,楼主的代码能不能贴完整点!
syliang2003 2005-04-04
  • 打赏
  • 举报
回复
java与html混合写?????
这是非常不科学的!
java还JAVA,HTML还HTML,分开好一点!
我在故你快乐 2005-04-04
  • 打赏
  • 举报
回复
larson001:
你好!
不好意思,i++有的,这里忘了。
Statement是这样写的:stmt = conn.createStatement();
飞行的兔子 2005-04-04
  • 打赏
  • 举报
回复
我看着就是i没有变,其它没问题啊?
看不出来啊,如果i<pagesize一直成立的话,相当于while变成while(rs.next())啊,应该没问题啊!
larson001 2005-04-04
  • 打赏
  • 举报
回复
你的Statement对象可是这样写的?
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);


另,while循环里怎么没见你写i++?

81,092

社区成员

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

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