<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:bksfhcxt";
String user="system";
String password="oracle2";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();
String sql="select * from LOGIN";
ResultSet rs=stmt.executeQuery(sql);
if (rs !=null){out.println("rs.getString(3)");}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
頁面能正確顯示 rs.getString(3) 字符出來,
但在執行下面語句時:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:bksfhcxt";
String user="system";
String password="oracle2";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();
String sql="select * from LOGIN";
ResultSet rs=stmt.executeQuery(sql);
//if (rs !=null){out.println("rs.getString(3)");}
while(rs.next()){%>
<%=rs.getString(1)%>
<%=rs.getString(2)%>
<%}%>
<table>
<tr>
<td>員工號</td>
<td>姓名</td>
</tr>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
</tr>
</table>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
則報以下錯誤:
type Exception report
message An exception occurred processing JSP page /index.jsp at line 24
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 24
21: <td>濮撳悕</td>
22: </tr>
23: <tr>
24: <td><%=rs.getString(1)%></td>
25: <td><%=rs.getString(2)%></td>
26:
27: </tr>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
javax.servlet.ServletException: java.sql.SQLException: [Microsoft][ODBC 驅動程序管理器] 無效的遊標狀態
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
org.apache.jsp.index_jsp._jspService(index_jsp.java:116)
原因比較簡單,我之前的代碼是:
while(rs.next()){%>
<%=rs.getString(1)%>
<%=rs.getString(2)%>
<%}%>
while循環這裏必然已經把數據集遍歷完畢了,也就是遊標走到了最後一行的後面(EOF行)。
然後我又想:
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
必然錯誤。
應該是把邏輯搞錯了,應該是:
String sql="select * from LOGIN";
ResultSet rs=stmt.executeQuery(sql);
%>
<table>
<tr>
<td>員工號</td>
<td>姓名</td>
</tr>
<% while(rs.next()){ %>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
</tr>
<% } %>
</table>
<%
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
此文由Web開發之答疑解惑源整理,若需轉載 ,請註明原文(ODBC驅動程序管理器無效的遊標狀態)出處:http://www.znjcx.com/html/y2012/3310_odbc-driver-manager-invalid-cursor-state.html