站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题请教一个和Sql语句相关的问题!

请教一个和Sql语句相关的问题!

摘要: 请教一个和Sql语句相关的问题!


一张表中,一个记录代表一个商品,记录含有商品所属单位的字段,我想求出各个单位的记录条数,总共有10几个单位吧,select count 可以一个一个来,但要10几下,我看书上说可以用group by 但是结果集却出错了,大家帮忙看看 。。。
还有要是把while改成if的话可以正确显示出其中一个单位的记录条数。
源程序:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8" import="java.sql.*"%>


<head>

JSP Page
</head>
<body>

JSP Page



<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //载入驱动程序类别
Connection con = DriverManager.getConnection("jdbc:odbc:accessdb"); //建立数据库链接,accessdb为ODBC数据源名称
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

String sql ="select unit,count(*) as [units] from computer group by unit";
ResultSet rs=stmt.executeQuery(sql);
while (rs.next()){
String aa =rs.getString(1);
int i =rs.getInt("hz");
String k =String.valueOf(i);
out.print(aa+"共有"+k+"条记录
");
}
rs.close();
stmt.close();
con.close();
%>

</body>


-------------------------------------------------------------------------------------------
错误信息:
HTTP Status 500 -

--------------------------------------------------------------------------------

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.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.ins_jsp._jspService(ins_jsp.java:84)
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)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)




select unit,count(unit) as [units] from computer group by unit


你的查询语句是正确的,问题应该出现在while循环里
把 String k =String.valueOf(i);注释掉看看


out.print(aa+"共有"+i+"条记录
");放到循环外面


查询语句是对的,
String k =String.valueOf(i);
这句话也是对的, int型的值默认是0, 所以这句话不可能错误的

在建立jdbc,odbc的时候出了错误, 注意下数据库名称,用户名和密码,再仔细点
应该没问题的


int i =rs.getInt("hz"); "hz"是什么?


对了,你是不是控制面板的数据源没配置好



还是不行阿,我把程序改了,但奇怪的是While变成if就成出现一条记录 。。。

String sql ="select unit,count(*) as [units] from computer group by unit";
ResultSet rs=stmt.executeQuery(sql);
String aa =null;
while (rs.next()){
aa =rs.getString(1);
out.print(aa+"
");
}
错误提示一样 。。。。


怎么可能换成if,你那个sql就是要检索出不同商品单位的个数,必然是while循环

int i =rs.getInt("hz"); "hz"是什么?

select unit,count(*) as [units] from computer group by unit
[units]是别名,"hz"是什么?
程序里设置断点,跑一下什么都清楚了,至于你数据源设置没有设置好,那要自己找了



试试把
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql ="select unit,count(*) as [units] from computer group by unit";
ResultSet rs=stmt.executeQuery(sql);
改成
PreparedStatement ps=con.prepareStatement("select unit,count(*) as [units] from computer group by unit");
ResultSet rs=con.executeQuery();
另外:
Connection con = DriverManager.getConnection("jdbc:odbc:accessdb");
是否要写成:
Connection con = DriverManager.getConnection("jdbc:odbc:accessdb","","");
""内跟的是SQL用户名 和 密码(如果你是sql帐户登陆的话),没有的话放空


数据源肯定没错,那个hz是复制的时候复制错了,就是units 。。。
我肯定知道要用while 不能用if,但我的意思是怎么if就能出来一个结果,while就不能出了 !?·!#!·#
要是数据源错了肯定一个结果都出不来了 。。。

我再试试楼上的!等会再说


哈哈,楼上正解!!!!!!

PreparedStatement ps=con.prepareStatement("select unit,count(*) as [units] from computer group by unit");
ResultSet rs=con.executeQuery();

请问这是为什么呢!?看来我是只会生搬硬套 。。。。


一般读数据库就用那两种方法,个人觉得PreparedStatement好用些,个中原由我也说不出个道来,大伙互相学习探讨。

有一说:createStatement();方法重载了好几个方法,定义了游标的使用状态。这可能是它比较容易出错的原因吧。


↑返回目录
前一篇: TOMCAT 有没有方法将defaultHost="localhost" 改成别的如hostL 然后用http://hostL:8080/访问?
后一篇: apache.org不通了. 请问,什么地方可以下载"poi.jar"文件??