java数据库问题

wqs0006 2001-05-26 09:41:00
我在jsp文件中用到了ResultSet,但是存在以下问题
1。用过rs后,执行rs.close()则出现错误:rs is closed
2。我不想让rs把完全相同的纪录合并,故在sql语句中加了关键字“all”,单ResultSet好像不支持all,相同纪录还是合并了
3。当while(i<=answernum&&rs.next())中,i<=answernum是true,但rs.next())是false时,出现如下错误:rs is closed

源代码如下:
<%@page contentType="text/html;charset=gb2312" %>
<%@page import="java.io.*,java.sql.*,java.util.*" %>
<jsp:useBean id="check" scope="page" class="bbs.Check" />
<%
sql="select * from ever_user where UID in (select Author from answer where QuestionID="+num+")";
rs=check.executeQuery(sql);
int tempnum=0;
int i=1;
while(i<=answernum&&rs.next())
{
tempnum=rs.getInt("Num");
currentgrace=rs.getInt("ExpertGrace");
currentgrace=currentgrace+intgrace[i];
sql="update ever_user set ExpertGrace="+currentgrace+"whereNum="+tempnum;
check.executeUpdate(sql);
i++;
}
rs.close()//加上此句则出错
%>

本人乃java菜鸟,还望大家多指教!!谢谢!!!!!!!!!!
...全文
130 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyyoung 2001-05-28
  • 打赏
  • 举报
回复
提示出什么错。
skyyoung 2001-05-28
  • 打赏
  • 举报
回复
在UPDATE
不用ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE
试试

public void executeUpdate(String sql)
{
try
{
if(conn!=null)
conn.close() ;
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement() ;
stmt.executeUpdate(sql);
conn.commit() ;
}
catch(SQLException ex)
{
System.out.println("check.executeUpdate:"+ex.getMessage());
}
}
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
另外,第2个问题,即:如果不想把查询结果中列相同的记录合并掉,该怎么办,我试着在sql语句中加关键字“all“,但不行!
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
我把executeQuery()中的stmt改为stmt1,在把executeUpdate中的stmt改为stmt2,但问题依然存在,我现在用下面的方法把问题解决了,但我还是希望大家能继续讨论此问题!!!!

while(rs.next()&&i<=answernum)
{
tempnum[i]=new Integer(rs.getInt("Num"));
currentgrace[i]=new Integer(rs.getInt("ExpertGrace"));
currentgrace[i]=new Integer(currentgrace[i].intValue()+intgrace[i]);
i++;
}
rs.close();
for(i=1;i<=answernum;i++)
{
sql="update ever_user set ExpertGrace="+currentgrace[i].intValue()+" where Num="+tempnum[i].intValue();
check.executeUpdate(sql);
}
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
经过测试,去掉check.executeUpdate(sql);这句,则程序通过,看来是这句出问题了。
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
谢谢sonyStd(三好书生)
我在bbs.Check中的executeQuery和executeUpdate方法中并没使用相同的statement
代码如下:
public ResultSet executeQuery(String sql)
{
rs=null;
try
{
if(conn!=null)
conn.close();
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("check.executeQuery:"+ex.getMessage() );
}
return rs;
}


public void executeUpdate(String sql)
{
try
{
if(conn!=null)
conn.close() ;
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE) ;
stmt.executeUpdate(sql);
conn.commit() ;
}
catch(SQLException ex)
{
System.out.println("check.executeUpdate:"+ex.getMessage());
}
}
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
to:skyyoung(路人甲)
TYPE_SCROLL_INSENSITIVE的ResultSet,不会显示别人做出的更改(do not show changes made by others),这具体是什么意思呢??
我不是计算机系的,基础差了点,呵呵.多指教!!
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
还有,第二个问题是我自己搞错了,已经解决了,很不好意思!
wqs0006 2001-05-28
  • 打赏
  • 举报
回复
出错信息:rs is closed

我想是因为:executeQuery和executeUpdate用的是同一个Connection.当执行check.executeUpdate(sql);后,rs失去了Connection,rs被关掉了,所以当循环到第二次时,产生出错信息。这个问题我已通过下面的代码解决,也就是把executeUpdate从while循环中提出来:


while(rs.next()&&i<=answernum)
{
tempnum[i]=new Integer(rs.getInt("Num"));
currentgrace[i]=new Integer(rs.getInt("ExpertGrace"));
currentgrace[i]=new Integer(currentgrace[i].intValue()+intgrace[i]);
}
for(i=1;i<=answernum;i++)
{
sql="update ever_user set ExpertGrace="+currentgrace[i].intValue()+" where Num="+tempnum[i].intValue();
check.executeUpdate(sql);
}
liulinliu 2001-05-27
  • 打赏
  • 举报
回复
sql="update ever_user set ExpertGrace="+currentgrace+"whereNum="+tempnum+"";
wqs0006 2001-05-27
  • 打赏
  • 举报
回复
但我在其它地方也也是这样用的,并没有出此问题,希望大家多多参与,回答一条我也感激不尽!!!
wqs0006 2001-05-27
  • 打赏
  • 举报
回复
怎么没人回答???急!!!!!!!!!!
sonyStd 2001-05-27
  • 打赏
  • 举报
回复
bbs.Check里是不是用了相同的Statement?因为当Statement关闭时,相应的ResultSet也将关闭。在while里,你调用了executeUpdate();建议你看看相关的几各类。
酒店管理系统分为前台和后台两个部分,其中后台供管理员管理系统之用,包括客房类型设置模块、客房设置模块以及操作员设置三个子模块,具体的功能模块如下。 客房类型设置模块:该模块用来管理酒店的所有客房类型,包括新增客房类型、编辑已有客房类型、删除客房类型等功能。 客房设置模块:该模块用来管理酒店的所有客房信息,包括新增客房、编辑已有客房、删除客房等功能。 操作员设置模块:该模块用来管理酒店的操作员信息,包括新增操作员、编辑已有操作员信息、删除操作信息等功能。 系统前台供酒店所有工作人员使用,包括入住登记模块、结账模块、预定模块、客户管理模块以及业务统计五个模块。具体的功能模块如下。 入住登记模块:该模块用来登记客户的入住信息,其中入住信息包括登记信息、客人信息以及费用信息三部分。 结账模块:该模块用来处理客户的退房信息,只需要知道客户所住的房间号码,就能进行退房结账。 预定模块:该模块用来处理客户的预定信息,除了可以新增预定信息外,还可以对已有的预定信息进行管理。 客户管理模块:该模块用来管理客户的登记信息,包括新增客户信息、编译已有客户信息、删除客户信息等功能。 业务统计模块:该模块用来统计酒店的客房出租率,并且已图形报表的形式来显示出租率信息。 本系统的开发工具具体如下。 系统开发平台:MyEclipse 6.5。 数据库管理系统软件:MySQL 5.0。 java开发包:JDK 5.0以上。 Web服务器:Tomcat 6.0。 本系统采用MVC架构模式开发,具体技术如下。 AJAX框架:使用ExtJS技术开发 显示层:使用JSP技术开发 数据访问层:使用DAO模式开发 持久层:使用Hibernate框架开发 首页访问地址 :http://localhost:8080/JavaPrj_9/首页配置 页面 修改 打开web.xml 修改 即可 /WEB-INF/pages/userLogin.jsp 复制代码 数据库配置 为hotel-hibernate.xml 文件 测试了将近2个小时 系统跑的还不错 一下小细节 bug 大家可以自己去调整下

81,115

社区成员

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

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