sql 查询语句错误distinct
JSP页面如下:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<jsp:useBean id="connManager" scope="application" class="MySearch.DBConnManager" />
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p> </p>
<p> </p>
<p> 模板名称测试:
<select name="name">
<%
Connection con= connManager.getConnection("access");
if(con==null)
{
%>
对不起,现在数据库忙,请稍后再试
<%
}
Statement stat2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql2="select distinct name from Template ";
ResultSet rs2=stat2.executeQuery(sql2);
while(rs2.next())
{%>
<option value=<%=rs2.getString("name")%>><%=rs2.getString("name")%></option>
<p>
<% }
rs2.close();
stat2.close();
connManager.releaseConnection("access",con);
%>
</select>
</p>
</body>
</html>
运行出现如下错误:
type Exception report
message
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.handlePageException(PageContextImpl.java:682)
org.apache.jsp.Metadata.website.admin.createdoc.create_005ftype_jsp._jspService(create_005ftype_jsp.java:106)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:320)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause
java.sql.SQLException: [Microsoft][ODBC 驱动程序 管理器] 非法的游标状态
sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5702)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:356)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:413)
org.apache.jsp.Metadata.website.admin.createdoc.create_005ftype_jsp._jspService(create_005ftype_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:136)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:320)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:293)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:240)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
note The full stack trace of the root cause is available in the Tomcat logs.
请问这是什么原因?
以上把distinct 去掉是没有错误的。得到的是所有记录。
问题点数:0、回复次数:9Top
1 楼yeyu710(叶雨)回复于 2005-02-02 14:18:18 得分 0
不会吧,是不是access的原因啊??Top
2 楼JeromeLiu(烛光)回复于 2005-02-02 14:28:21 得分 0
晕了,奇怪。Top
3 楼singedcat(以夢為馬)回复于 2005-02-02 14:36:40 得分 0
upTop
4 楼cutelion(MADEinCNNC)回复于 2005-02-02 14:51:08 得分 0
[Microsoft][ODBC 驱动程序 管理器] 非法的游标状态
可能是在
<option value=<%=rs2.getString("name")%>><%=rs2.getString("name")%></option>
中两次用了rs2.getString("name");
先赋值:
name=rs2.getString("name");再
<option value=name><%=name %></option>Top
5 楼romeo(豺神到)回复于 2005-02-02 15:00:53 得分 0
先把sql拿到数据库去执行一下,看看行不行,然后再拿到程序去运行,就知道哪里出错了Top
6 楼zode(德)回复于 2005-02-02 15:24:01 得分 0
select distinct name from Template 在数据库中是可以执行的啊Top
7 楼keyong19ryry(随风逐月)回复于 2005-02-02 15:49:22 得分 0
if(con==null)
{
%>
对不起,现在数据库忙,请稍后再试
<%
}
Statement stat2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql2="select distinct name from Template ";
===================================================================
感觉你这段有问题,如果con==null的话,程序依然会继续执行,就会出错
另外 如果String sql2="select distinct name from Template ";不行,
试试String sql2="select distinct name as name from Template ";Top
8 楼romeo(豺神到)回复于 2005-02-02 16:06:25 得分 0
ResultSet rs2=stat2.executeQuery(sql2);
然后System.out.println("size:"+rs2.getSize());
看看返回多少,(很久没用rs了,忘记了如何得到size的了,呵呵)Top
9 楼kevin_fang()回复于 2005-02-02 17:40:37 得分 0
试试 把ResultSet.TYPE_SCROLL_SENSITIVE 变成ResultSet.TYPE_FORWARD_ONLY 我本地类似的例子改成
这个就没有那个无效游标状态的异常了
似乎distinct查询 跟 scroll有点冲突?(猜测而已)Top




