Struts 数据库连接池与数据库操作工具类
作者 杨川 www.efine66.com
在做学校里贫困生系统时,用到Struts的数据库连接池,连接池在struts-config.xml 里配置好后,在
Action中用以下方法创建连接conn
DataSource datasource=getDataSource(request, "A");
try {
//取得数据库连接
conn = dataSource.getConnection();
} catch (Exception e) {
System.out.println("获得连接出错" + e.toString());
}
每个Action中都要这样try catch感觉很是麻烦,自己写了一个数据库的工具类,真对struts 的数据库连
接池, 在Action中可以方便的进行 connection Statement ResultSet 的获取。以及各个对像的关闭,说
到这有必要强调一下,用struts数据库连接池一定不要忘 了关闭连接,要不然页面速度很慢。好了,废
话不说了,先发一下,连接池的struts-config.xml配置。
< data-source key ="A" type ="org.apache.commons.dbcp.BasicDataSource" >
< set-property property ="driverClassName"
value ="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
< set-property property ="url"
value ="jdbc:microsoft:sqlserver://192.168.0.1:1433;DatabaseName=pkssjk;" />
< set-property property ="username" value ="sa" />
< set-property property ="password" value ="3721444" />
< set-property property ="maxActive" value ="10" />
< set-property property ="maxWait" value ="50000" />
< set-property property ="defaultAutoCommit" value ="true" />
< set-property property ="defaultReadOnly" value ="false" />
</ data-source >
</ data-sources >
以下是数据库操作的工具类,希望对大家有帮助。它的使用方法是,在Action 的方法中实例化,传递一下DataSoruce参数。然后,你想要什么数据库对像,get 就行了,哈哈,方便吧,更重要的是关闭的时候,你获取那一个对像,就调用那 一个对像的关闭方法即可,不必 get了ResultSet 了,再调用stmt conn.关闭方法。如果不怕麻烦的话,为了程序的健壮性,可以在Action中判断一下,所获的对像是不是空,如果是空刚跳转到错误页面,工具类不会有什么数据库异常,出问题了只是返回空对像。
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSetMetaData;
import java.sql.DriverManager;
import javax.sql.DataSource;
import javax.servlet.http.HttpServletRequest;
/**
* <p>Title:操作数据库对象 </p>
*
* <p>Description: 操作数据库的工具类 ,包含有各种操作数据库方法</p>
*
* <p>Copyright:www.efine66.com Copyright (c) 2007</p>
*
* <p>Company:efine </p>
* @author 杨川
* @version 1.0
*/
public class DB_ut {
Connection conn = null ;
Statement stmt = null ;
DataSource dataSource = null ;
ResultSet rs = null ;
public DB_ut(DataSource dataSource) {
this .dataSource = dataSource;
}
public Connection getConn() {
this .setConn();
return conn;
}
public Statement getStmt() {
this .setStmt();
return stmt;
}
public ResultSet getRs(String sql) {
this .setStmt();
try {
rs = stmt.executeQuery(sql);
} catch (SQLException ex) {
System.out.println( " 获得rs出错 " + ex.toString());
}
return rs;
}
// /以下是关闭数据库各个对象的操作 /
// 注意,rs stmt conn 在主函数中调用那一个,就只关闭那一个就可以 /
public void closeConn() {
if (conn != null ) {
try {
conn.close();
} catch (SQLException ex) {
System.out.println( " 获得连接出错 " + ex.toString());
}
}
}
public void closeStmt() {
if (stmt != null ) {
try {
stmt.close();
} catch (SQLException ex) {
System.out.println( " 获得连接出错 " + ex.toString());
}
}
this .closeConn();
}
public void closeRs() {
if (rs != null ) {
try {
rs.close();
} catch (SQLException ex) {
System.out.println( " 获得连接出错 " + ex.toString());
}
}
this .closeStmt();
this .closeConn();
}
// /以下私用工具函数 //
private void setConn() {
if (conn == null ) {
if (dataSource != null ) {
try {
// 取得数据库连接
conn = dataSource.getConnection();
} catch (Exception e) {
System.out.println( " 获得连接出错 " + e.toString());
}
}
}
}
private void setStmt() {
if (stmt == null ) {
this .setConn();
if (conn != null ) {
try {
stmt = conn.createStatement();
} catch (SQLException ex) {
System.out.println( " 获得stmt出错 " + ex.toString());
}
}
}
}
}
以下是在Action是调用的程序片段。
public class Main extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
定义数据库操作工具类 //
db.DB_ut DB_ut = new db.DB_ut(getDataSource(request, " A " ));
// 以下是获取带参数的ResultSet的例子代码,关闭的时候,只调用相应的方法即可。
ResultSet rs = null ;
String sql = " select * from QGZX_xueshengshenqing " ;
rs = DB_ut.getRs(sql);
v_al = XueShengBean.getArrayList(rs);
DB_ut.closeRs();
// 以下是获取conn的例子代码,关闭的时候,只调用相应的方法即可。
Connection conn = DB_ut.getConn();
.
.
.
DB_ut.closeConn
// /
// 以下是获取Statement的例子代码,关闭的时候,只调用相应的方法即可。
Statement stmt = DB_ut.getStmt();
.
.
.
DB_ut.closeStmt;
}
}
}
希望对大家有帮助,有时间了来我的blog踩一下,www.efine66.com