连接池问题!请指教!

lndlzcy 2004-10-01 12:01:22
在server.xml里的context和web.xml都已配置完成。
这是实现的BEAN:
package balancepack;

import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class sqlBean{
public Connection conn=null;
Statement stmt=null;
public ResultSet rs=null;

public sqlBean(){///构造函数
}

public int executeInsert(String sql){
int num=0;
try{
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/webbalance");
conn=ds.getConnection();
Statement stmt=conn.createStatement();
num=stmt.executeUpdate(sql);
}
catch (NamingException ne) {
System.out.println("Initial DataSource error.");
ne.printStackTrace();
} catch (SQLException e) {
System.out.println("SQL SERVER: " + e);
e.printStackTrace();
System.out.print("Connection Full!");
}
CloseDataBase();
return num;
}

//display data
public ResultSet executeQuery(String sql){
rs=null;
try{
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/webbalance");
conn=ds.getConnection();
Statement stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch (NamingException ne) {
System.out.println("Initial DataSource error.");
ne.printStackTrace();
} catch (SQLException e) {
System.out.println("SQL SERVER: " + e);
e.printStackTrace();
System.out.print("Connection Full!");
}
CloseDataBase();
return rs;
}
// delete data
public int executeDelete(String sql){
int num=0;
try{
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/webbalance");
conn = ds.getConnection();
Statement stmt=conn.createStatement( );
num=stmt.executeUpdate(sql);
}
catch (NamingException ne) {
System.out.println("Initial DataSource error.");
ne.printStackTrace();
} catch (SQLException e) {
System.out.println("SQL SERVER: " + e);
e.printStackTrace();
System.out.print("Connection Full!");
}
CloseDataBase();
return num;
}
//////////////////
public void CloseDataBase(){
try{
conn.close();
}
catch(Exception end){
System.err.println("执行关闭Connection对象有错误:"+end.getMessage( ) );
System.out.print("执行执行关闭Connection对象有错误:有错误:"+end.getMessage()); //输出到客户端
}
}
}



现在在用连接池读取数据时提示如下错误:
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.

请问这是为什么?还有,用到连接池的BEAN这样写是否正确和妥当?
刚看到篇帖子说不能直接把CON CLOSE掉,是这样么?

有经验的人帮忙指点下,谢谢了!
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lndlzcy 2004-10-05
  • 打赏
  • 举报
回复
谢谢你的回复,结贴哦...
j2nix 2004-10-03
  • 打赏
  • 举报
回复
同意 sagittarius1979(缤纷眩目的世界里 是否拥有自己的色彩) 的看法。

如同JDBC 当你return rs; 前调用CloseDataBase()已经将联接断开,所以结果集肯定不存在了。
因为取数据时并不一次从数据库取出,而是在rs.next()时一条一条的取的。
lndlzcy 2004-10-01
  • 打赏
  • 举报
回复
哈哈,自己看出来了....
原来是....
真是猪眼啊....
CloseDataBase();
return rs;
在查询的时候居然先关DATABASE,然后取结果集,真笨啊!!

请问下,这么写BEAN从实际项目来说有什么问题么?就是请大家给我挑挑毛病啊!
lndlzcy 2004-10-01
  • 打赏
  • 举报
回复
晕,过了一夜还没人回复....

81,092

社区成员

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

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