日期:2014-05-16  浏览次数:20438 次

利用commons-dbcp和commons-pool搭建数据库连接池
依赖commons-dbcp-1.4.jar和commons-pool-1.5.6.jar和ojdbc14.jar

TestDbPools.java代码:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.log4j.Logger;

/**
 * 数据库连接池
 * */
public class TestDbPools {

	static Logger logger = Logger.getLogger(TestDbPools.class);
	
	private static BasicDataSource dataSource = null;
	
	public TestDbPools(){
		
	}
	
	public static void init() {
		if (dataSource != null) {
			try {
                dataSource.close();
            } catch (Exception e) {
            	logger.error(e.getMessage());
            }
            dataSource = null;
        }

        try {
            Properties p = new Properties();
            p.setProperty("driverClassName", "oracle.jdbc.driver.OracleDriver");
            p.setProperty("url", "jdbc:oracle:thin:@192.168.1.10:1521:oraid");
            p.setProperty("password", "zznode");
            p.setProperty("username", "shihuan");
            p.setProperty("maxActive", "30");
            p.setProperty("maxIdle", "10");
            p.setProperty("maxWait", "1000");
            p.setProperty("removeAbandoned", "false");
            p.setProperty("removeAbandonedTimeout", "120");
            p.setProperty("testOnBorrow", "true");
            p.setProperty("logAbandoned", "true");

            dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
        	logger.error(e.getMessage());
        }
    }

	/**
	 * 外口调用方法,调用此方法即可获取一个数据库的连接池
	 * */
    public static synchronized Connection getConnection() {
        if (dataSource == null) {
            init();
        }
        Connection conn = null;
        if (dataSource != null) {
            try {
				conn = dataSource.getConnection();
			} catch (SQLException e) {
				logger.error(e.getMessage());
			}
        }
        return conn;
    }
}


OperatorDb.java代码:
private Connection conn = null;
	private PreparedStatement pstmt = null;
    private ResultSet rs = null;
	
    public ResultSet getRs(){
		conn = TestDbPools.getConnection();
		String sql = "SELECT T.MODULE_NAME, T.PARAM_NAME, T.SHOW_NAME, T.REL_SYMBOLS, T.GREEN_VALUE, T.YELLOW_VALUE, T.RED_VALUE, T.UNIT, T.SCPOE FROM TB_THRESHOLD_SETTING T WHERE T.PARAM_NAME = ?";
		try {
			pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			pstmt.setString(1, "CSZJFX");
			rs = pstmt.executeQuery();
		    while(rs.next()){
		    	System.out.println("shihuan= " + rs.getString(1) + " -- " + rs.getString("MODULE_NAME"));
		    }
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return rs;
    }
    
    public void closeDb(){
    	if(rs != null){   //关闭记录集
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(pstmt != null){   //关闭声明
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(conn != null){   ////关闭连接
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
    }
    
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		OperatorDb odb = new OperatorDb();
		odb.getRs();
		odb.closeDb();
	}

}