通过连接池提取数据,下面的数据库处理类,应如何优化好呐?
package com.util; import java.sql.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * */ public class DbManager { private Connection conn; private Statement stmt; private static final Log logger = LogFactory.getLog(DbManager.class); public DbManager() { createConnection(); } public void createConnection() { try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:/MySqlDS"); conn = ds.getConnection(); } catch (Exception e) { e.printStackTrace(); } } /** 传入查询数据库的sql语句,返回ResultSet,注意使用完ResultSet后关闭。 * * @param sql * @return 返回结果集 */ public ResultSet executeQuery(String sql) { ResultSet rs = null; if (conn == null) createConnection(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); rs = null; } return rs; } /** 传入执行数据更新的语句,返回更新结果,真为成功执行(INSERT, UPDATE, or DELETE) * * @param sql * @return 返回是否有结果集 */ public boolean excute(String sql) { boolean bSuccess = true; if (conn == null) createConnection(); try { stmt = conn.createStatement(); bSuccess = stmt.execute(sql); } catch (SQLException e) { e.printStackTrace(); bSuccess = false; } return bSuccess; } /** 返回更新行数(INSERT, UPDATE, or DELETE) * * @param sql * @return 返回更新行数 */ public int excuteUpdate(String sql) { int changedrows = 0; if (conn == null) createConnection(); try { stmt = conn.createStatement(); changedrows = stmt.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } return changedrows; } /** 返回结果集行数 * * @param rs * @return */ public int getRowsSize(ResultSet rs) { int size = 0; try{ int oPos = rs.getRow(); if(rs.last()){ size = rs.getRow(); rs.absolute(oPos); } } catch (SQLException e){ e.printStackTrace(); } return size; } /** 预编译查询,返回结果集 * * @param sql * @param conditions arrays * @return ResultSet * @throws SQLException */ /* public ResultSet executeQuery(String sql, Object[] obj) { PreparedStatement pstmt = null; ResultSet rs = null; if (conn == null) createConnection(); try { pstmt = conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { pstmt.setObject(i + 1, obj[i]); } rs = pstmt.executeQuery(); } catch (SQLException e) { e.printStackTrace(); rs = null; } return rs; } */ /** 释放Connection * */ public void releaseConnection() { try { if(stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
