诚心请教关于数据库连接池的问题,请高手前来指点,人人有分!!!!

金豆豆老爹 2002-09-17 08:22:56
小弟在网上看到了关于数据库连接池的一份代码DBConnectionManager.java(听说是几年前一个叫好兵的人写的),就试着调了调,基本上调通了,可是我想把它写在一个javabean里面,然后在每一页调用的时候,用<jsp:usebean>就可以了。于是自己又找了一个通用的访问数据库的javabean,并且在javabean中调用DBConnectionManager。请问我下面写的对么?

package sqlbean;
import sqlbean.*;
import java.sql.*;
import java.io.*;

public class sqlbean
{
String StrError="";
Connection conn=null;
ResultSet rs=null;
Statement stmt=null;
public sqlbean()
{
try
{
String poolName="JdbcOdbcInformix"; //定义连接池名
DBConnectionManager dbMrg =DBConnectionManager.getInstance();
conn = dbMrg.getConnection(poolName);
stmt = conn.createStatement();
}
catch(java.sql.SQLException e)
{
System.err.println("打开数据库错:"+ e.getMessage());
}
}
//=====================通用查询用的SQL语句串==========================
//添加语句
public String ExecuteAdd(String sql)
{
rs=null;
int count;
try
{
count= stmt.executeUpdate(sql);
return("success");
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
StrError=ex.getMessage();
return(StrError);
}

}

//===============================================
//数据库修改记录操作
public String ExecuteUpdate(String sql)
{
rs=null;
int count;
try
{
count= stmt.executeUpdate(sql);
return("success");
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
StrError=ex.getMessage();
return(StrError);
}

}
//===============================================
//数据库删除记录操作
public String ExecuteDelete(String sql)
{
rs=null;
try
{
stmt.executeUpdate(sql);
return("success");
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
StrError=ex.getMessage();
return(StrError);
}

}
//=====================查询用的SQL语句串可以滚动==========================
public ResultSet ExecuteQuery(String sql)
{
rs=null;
try
{
rs= stmt.executeQuery(sql);
return (rs);
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
}
return rs;
}

//=====================取结果集数量==========================
public int GetCount(String sqlTableAndWhere)
{
rs=null;
try
{
sqlTableAndWhere="select count(*) as cnt from " + sqlTableAndWhere;
rs=stmt.executeQuery(sqlTableAndWhere);
if (rs.next()){
int totalRec=rs.getInt("cnt");
rs.close();
return (totalRec);
}
else return (0);
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
}
return (0);
}
//===========================
//关闭数据库
public void closeconn()
{
try
{ //登记JDBC驱动程序
conn.close();
}
catch(SQLException e)
{
System.err.println("数据库关闭错:"+ e.getMessage());
}
}

//============================
//关闭记录集并且关闭数据库
public void closedb(ResultSet rs)
{
try
{
rs.close();
conn.close();
}
catch(SQLException e)
{
System.err.println("数据库关闭错:"+ e.getMessage());
}

}

//保存原来的查询
public ResultSet Query(String sql)
{
rs=null;
try
{
rs= stmt.executeQuery(sql);
return (rs);
}
catch(SQLException ex)
{
System.err.println("查询语句出错:"+ex.getMessage());
}
return rs;
}

}

但javabean中的closeDB(ResultSet rs)方法是直接关了数据库连接,这样是不是不对?如果不对,不知道这个方法怎么重写,才能发挥连接池的作用?

另外在jsp中是不是这样调用:
<jsp:usebean id="sqlbean"/>
....
.....
<%
String sql="XXXX";
ResultSet rs=sqlbean.ExecuteQuery(sql);
while(rs.next())
{
.....
}
sqlbean.closedb(rs);
.....
%>

请各位说说,ok??

...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhtisboy 2002-09-18
  • 打赏
  • 举报
回复
关闭可以这样
rs.close()
stmt.close()
con.close()
<jsp:useBean id="sqlbean" class="sqlbean.sqlbean"/>
不过我觉得你的命名规则不对,
类一般首字母要大写(你小写当然也可以)
如你可以定义SqlBean
zhu_liping 2002-09-18
  • 打赏
  • 举报
回复
你的javabean里面没有用到连接池呀
superszhu 2002-09-18
  • 打赏
  • 举报
回复
没有什么对还是不对的,
只是看你的业务逻辑是怎么样,

在JSP中,若你执行了cloasedb的操作,
则在以下的代码中将不能用到rs对象了。

只能在你的while循环中做处理
learnner 2002-09-18
  • 打赏
  • 举报
回复
<jsp:useBean id="sqlbean" class="sqlbean.sqlbean"/>
learnner 2002-09-18
  • 打赏
  • 举报
回复
<jsp:usebean id="sqlbean" class="sqlbean.sqlbean"/>
金豆豆老爹 2002-09-18
  • 打赏
  • 举报
回复
各位,我想问的不是这些问题。可能是我说的不清楚的缘故。
我的这个bean中已经调用了连接池:
String poolName="JdbcOdbcInformix"; //定义连接池名
DBConnectionManager dbMrg =DBConnectionManager.getInstance();
conn = dbMrg.getConnection(poolName);
stmt = conn.createStatement();

我想问的是:
如果我每个页面都有查询操作,
如果用<jsp:usebean id="sqlbean" scope=" "/>
scope这个地方是不是一定要用application呀?
如果不用application是不是发挥不了连接池的作用啊?
在每个页面中执行完了查询操作之后肯定要释放连接池,
要调用sqlbean.closeconn()方法,
请问我这样写对么?
public void closeconn()
{
dbMrg.freeConnection("JdbcOdbcInformix",conn);
//就是释放连接池
}
另外好兵的那个连接池程序中的release()方法,应该在什么情况下调用?
是不是应该写在关闭应用程序的的代码里?

81,091

社区成员

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

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