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-sources > < 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中判断一下,所获的对像是不是空,如果是空刚跳转到错误页面,工具类不会有什么数据库异常,出问题了只是返回空对像。
package db; 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
