连接池问题!请指教!

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掉,是这样么?

有经验的人帮忙指点下,谢谢了!
...全文
74 点赞 收藏 4
写回复
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
晕,过了一夜还没人回复....
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告