这个已经解决了,但又出现了以下问题:type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: [Microsoft][ODBC 驱动程序管理器] 无效的游标状态 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781) org.apache.jsp.admre_jsp._jspService(org.apache.jsp.admre_jsp:347) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) 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.SQLGetDataString(Unknown Source) sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source) sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source) sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source) org.apache.jsp.admre_jsp._jspService(org.apache.jsp.admre_jsp:61) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.请指教!
很久很久没有搞过odbc的驱动了。 印象中,odbc取值的话,你的sql语句为: String sql="select * from guestbook where id="+id;但是rs.getString("???")的时候,顺序很重要,如果顺序错误,游标状态无效; 可以更改sql语句为:"select name,topic.... from guestbook where id="+id;印象中如此,你实践一下吧,至少4年前的事体了。建议用标准的jdbc-2.0用法。
你看一下 ------------------- 要注意select后的顺序 要根据顺序来到得值 如:String str1=rs.getString(1); String str2=rs.getString(2); getString(1)和getString(2)不能调顺序 如果1和2换成列名也一样,哪个列名在前,就得先取值 查询的结果集不能有相同的列名(发生相同列名的情况:select* from aa a join bb b on a.name=b.name) 不然取值时会报跟前调换取值顺序后的错误:无效的描述符索引
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.admre_jsp._jspService(org.apache.jsp.admre_jsp:347)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
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.SQLGetDataString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
org.apache.jsp.admre_jsp._jspService(org.apache.jsp.admre_jsp:61)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.请指教!
<jsp:useBean id="DBconn" scope="page" class="MyJsp.DBconn"/>
<%
int id=java.lang.Integer.parseInt(request.getParameter("id"));
Connection Conn=DBconn.GetConn();
Statement stmt=Conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
String sql="select * from guestbook where id="+id;
ResultSet rs=stmt.executeQuery(sql);
String name=rs.getString("name");
String topic=rs.getString("topic");
String email=rs.getString("email");
String face=rs.getString("face");
String face2=rs.getString("face2");
String show=rs.getString("show");
String url=rs.getString("url");
String oicq=rs.getString("oicq");
String ly=rs.getString("ly");
String guestip=rs.getString("guestip");
String re=rs.getString("re");
String time=rs.getString("time");%>
<html>
<head>
<title>留言簿</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="images/main.css" type="text/css">
<script language="JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</head>
印象中,odbc取值的话,你的sql语句为:
String sql="select * from guestbook where id="+id;但是rs.getString("???")的时候,顺序很重要,如果顺序错误,游标状态无效;
可以更改sql语句为:"select name,topic.... from guestbook where id="+id;印象中如此,你实践一下吧,至少4年前的事体了。建议用标准的jdbc-2.0用法。
asp中游标处于第一条记录,所以可以直接取值.
而java中游标处于第一条记录前,
所以取值前应该rs.next()让它移动到第一条记录(rs.first()也可)
.............................
String sql="select * from guestbook where id="+id;
ResultSet rs=stmt.executeQuery(sql);
rs.next()//注意!!这里.也可是rs.first()
String name=rs.getString("name");
String topic=rs.getString("topic");
String email=rs.getString("email");
.........................
-------------------
要注意select后的顺序
要根据顺序来到得值
如:String str1=rs.getString(1);
String str2=rs.getString(2);
getString(1)和getString(2)不能调顺序
如果1和2换成列名也一样,哪个列名在前,就得先取值
查询的结果集不能有相同的列名(发生相同列名的情况:select* from aa a join bb b on a.name=b.name)
不然取值时会报跟前调换取值顺序后的错误:无效的描述符索引
{
String name=rs.getString("name");
String topic=rs.getString("topic");
String email=rs.getString("email");
String face=rs.getString("face");
String face2=rs.getString("face2");
String show=rs.getString("show");
String url=rs.getString("url");
String oicq=rs.getString("oicq");
String ly=rs.getString("ly");
String guestip=rs.getString("guestip");
String re=rs.getString("re");
String time=rs.getString("time");
}