学了JDBC之后,就听说有数据库连接池这个概念,现在已经工作了,但从来没有写过数据库连接池这些东西,说起来有点惭愧啊。
小弟在此跪求连接池的接口,以及实现类 50分奉上,分不多,请各位帮忙

解决方案 »

  1.   

    BaseDao: private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); private static DataSource dataSource = null; static {
    try {
    Context ctx = new InitialContext();
    dataSource = (DataSource) ctx
    .lookup("java:comp/env/java/dataSource");
    } catch (NamingException e) {
    System.err.println("%%%% Error Creating data source %%%%");
    e.printStackTrace();
    }
    }
    private static DataSource ds = null;
    static{
    try {
    Context ctx = new InitialContext();
    ds = (DataSource)ctx.lookup("java:comp/env/java/dataSource");
    } catch (NamingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    private CtrlConnection() {
    } public static Connection getConnection() throws SQLException {
    Connection connection = (Connection) threadLocal.get(); if (connection == null || connection.isClosed()) {
    if (dataSource == null) {
    rebuildDataSource();
    }
    if (dataSource == null) {
    // do something else
    } else {
    connection = dataSource.getConnection();
    if (connection.getAutoCommit())
    connection.setAutoCommit(false);
    }
    threadLocal.set(connection);
    } return connection;
    } public static void rebuildDataSource() {
    try {
    Context ctx = new InitialContext();
    dataSource = (DataSource) ctx
    .lookup("java:comp/env/java/dataSource");
    } catch (NamingException e) {
    System.err.println("%%%% Error Creating data source %%%%");
    e.printStackTrace();
    }
    } public static void closeConnection() throws SQLException {
    Connection connection = (Connection) threadLocal.get();
    threadLocal.set(null); if (connection != null) {
    connection.close();
    }
    }
    TestDao: //查询方法
    public Result doQuery(String sql, List params) throws SQLException {
    Connection conn = CtrlConnection.getConnection();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try {
    pstmt = conn.prepareStatement(sql); if (!(params == null || params.size() == 0)) {
    for (int i = 0; i < params.size(); i++) {
    pstmt.setObject(i + 1, params.get(i));
    }
    } rs = pstmt.executeQuery();
    // ResultSetMetaData rsmd = rs.getMetaData();
    return ResultSupport.toResult(rs);
    } catch (SQLException e) {
    e.printStackTrace();
    throw e;
    } finally {
    try {
    pstmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    //增删改方法
    public void doUpdate(String sql, List params) throws SQLException {
    Connection conn = CtrlConnection.getConnection();
    PreparedStatement pstmt = null;
    try {
    pstmt = conn.prepareStatement(sql); if (!(params == null || params.size() == 0)) {
    for (int i = 0; i < params.size(); i++) {
    pstmt.setObject(i + 1, params.get(i));
    }
    } pstmt.executeUpdate();
    } catch (SQLException e) {
    e.printStackTrace();
    throw e;
    } finally {
    try {
    pstmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    [b]遍历Result:[/b]public void show() {
    String sql = "select...";
    Connection conn = null;
    // TestDao dao = new TestDao(conn);
    TestDao dao = new TestDao(); try { Result result = dao.doQuery(sql, null); Object[][] table1 = result.getRowsByIndex();
    for (Object[] row : table1) {
    // row[0];
    for (Object col : row) { }
    } SortedMap[] table2 = result.getRows();
    for (SortedMap row : table2) {
    row.get("id");
    row.get("name");
    } conn.commit();
    } catch (Exception e) {
    // TODO: handle exception
    try {
    conn.rollback();
    } catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    } finally {
    try {
    conn.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  2.   

    DHCP
      

  3.   


    你可以把三楼Dao抽象成一个借口
      

  4.   

    连接不是直接可以在TOMCAT和web.xml中配的么,你自己在程序中通过
    Context ctx = new InitialContext();
    dataSource = (DataSource) ctx
    .lookup("java:comp/env/java/dataSource");
    方式调用就行,干吗非得自己写个。怎么写啊,我还不会,楼主写好了发出来瞧瞧哈。
      

  5.   

    你是说用JDBC自己写个连接池吧,看看这个http://blog.csdn.net/caoyinghui1986/archive/2008/04/22/2315864.aspx