当前位置: 技术问答>java相关
诚心请教关于数据库连接池的问题,请高手前来指点,人人有分!!!!
来源: 互联网 发布时间:2015-09-07
本文导语: 小弟在网上看到了关于数据库连接池的一份代码DBConnectionManager.java(听说是几年前一个叫好兵的人写的),就试着调了调,基本上调通了,可是我想把它写在一个javabean里面,然后在每一页调用的时候,用就可以了。...
小弟在网上看到了关于数据库连接池的一份代码DBConnectionManager.java(听说是几年前一个叫好兵的人写的),就试着调了调,基本上调通了,可是我想把它写在一个javabean里面,然后在每一页调用的时候,用就可以了。于是自己又找了一个通用的访问数据库的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中是不是这样调用:
....
.....
请各位说说,ok??
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中是不是这样调用:
....
.....
请各位说说,ok??
|
|
|
没有什么对还是不对的,
只是看你的业务逻辑是怎么样,
在JSP中,若你执行了cloasedb的操作,
则在以下的代码中将不能用到rs对象了。
只能在你的while循环中做处理
只是看你的业务逻辑是怎么样,
在JSP中,若你执行了cloasedb的操作,
则在以下的代码中将不能用到rs对象了。
只能在你的while循环中做处理
|
你的javabean里面没有用到连接池呀
|
关闭可以这样
rs.close()
stmt.close()
con.close()
不过我觉得你的命名规则不对,
类一般首字母要大写(你小写当然也可以)
如你可以定义SqlBean
rs.close()
stmt.close()
con.close()
不过我觉得你的命名规则不对,
类一般首字母要大写(你小写当然也可以)
如你可以定义SqlBean