关于数据库联接池的问题!

xiezhirong 2004-07-05 11:39:53
我用的是tomcat4.1.27 数据库用的是Oracle8i。
最近我尝试着在项目中使用数据库联接池,但是老是碰到"关闭的数据库联接","关闭的语句"等错误。但是我从代码里却查不出一点儿毛病,有一个jsp页面我发现只要先执行一个update 语句,再执行一个select语句的话,在while(rs.next){}循环里我用getString等方法的时候就会报告"关闭的语句"错误,但是我决定没有在关闭与当前ResultSet 相关的PreparedStatement;
我的数据库联接池是如下配置的:
tomcat 的server.xml文件中:
<Context path="" docBase="e:/personal/siyi/siyi/javasrc/webdir" debug="0">
<Resource name="jdbc/OracleDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/OracleDB">
<parameter>
<name>username</name>
<value>siyi</value>
</parameter>
<parameter>
<name>password</name>
<value>siyi</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@192.168.0.10:1521:oracle</value>
</parameter>
</ResourceParams>
</Context>
获得数据库连接的方法如下:
public static synchronized Connection getConnection()throws Exception{

if(initCtx==null)initCtx = new InitialContext();
if(ctx==null) ctx = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象
Object obj =ctx.lookup("jdbc/OracleDB");

//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource)obj;

Connection con = ds.getConnection();
return con;
}
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiezhirong 2004-07-06
  • 打赏
  • 举报
回复
不好意思,我翻了一个愚蠢的错误,sql的值赋值顺序不对
xiezhirong 2004-07-06
  • 打赏
  • 举报
回复
我刚才又加了一些调试信息,把while循环改成如下:
while(rs.next()){
System.out.println("111");
String tmp=rs.getString("user_id");
System.out.println("222");
}
我竟然发现这个循环被执行了两次,输出结果是:
111
222
111
(接下来是出错信息)
但是数据库里肯定只有一条记录的啊,如果有多条记录的话,rs.next()可以成功,为什么rs.getString()就会失败呢?而且如果if("startsysuserinfo".equalsIgnoreCase(action))不成立的话,输出结果很正常的!
xiezhirong 2004-07-06
  • 打赏
  • 举报
回复
比如下面这段代码:
if("startsysuserinfo".equalsIgnoreCase(action)){
String[] userids=request.getParameterValues("user_id");
if(userids!=null&&userids.length>0){
String instr=null;
for(int index=0;index<userids.length;index++){
if(instr==null) instr=" '"+userids[index]+"' ";
else instr+=",'"+userids[index]+"' ";
}
if(instr!=null&&instr.trim().length()>0){
sql="update t_user set user_useful=1 where user_id in ("+instr+")";
pstmt=con.prepareStatement(sql);
pstmt.executeUpdate();
}
}
}
if(rs!=null) try{rs.close();}catch(Exception ex){};
if(pstmt!=null) try{pstmt.close();}catch(Exception ex){};
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
String tmp=rs.getString("user_ID");
}

如果if("startsysuserinfo".equalsIgnoreCase(action))条件不满足的话,程序执行正常,如果条件满足的话,程序执行到String tmp=rs.getString("user_id");的时候报告“关闭的语句”错误
csrcom 2004-07-05
  • 打赏
  • 举报
回复
把你的代码贴出来,让我们看看

81,092

社区成员

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

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