lDataSource用来取代DriverManager来获取Connection; l通过DataSource获得Connection速度很快; l通过DataSource获得的Connection都是已经被包裹过的(不是 驱动原来的连接),他的close方法已经被修改。 l一般DataSource内部会用一个连接池来缓存Connection lDataSource用来取代DriverManager来获取Connection;l通过DataSource获得Connection速度很快;l通过DataSource获得的Connection都是已经被包裹过的(不是驱动原来的连接),他的close方法已经被修改。l一般DataSource内部会用一个连接池来缓存Connection,这样可以大幅度提高数据库的访问速度;l连接池可以理解成一个能够存放Connection的Collection;l我们的程序只和DataSource打交道,不会直接访问连接池;使用DBCP步骤如下,三步:l使用DBCP必须用的三个包:commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar。 l配置参数。lJavaAPI:BasicDataSourceFactory.createDataSource(properties); 2.dbcpconfig.properties配置文件内容: #连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=root#initialSize=10#最大连接数量maxActive=50#maxIdle=20#minIdle=5#maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=gbk#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true#driver default 指定由连接池所创建的连接的只读(read-only)状态。#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)defaultReadOnly=#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED3.不需要再写数据源,直接用 public final class JdbcUtils {private static DataSource myDataSource = null;private JdbcUtils() {}static {try {Class.forName("com.mysql.jdbc.Driver");登录后复制// myDataSource = new MyDataSource2();登录后复制登录后复制Properties prop = new Properties();// prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");登录后复制// prop.setProperty("user", "user");InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");prop.load(is);myDataSource = BasicDataSourceFactory.createDataSource(prop);//创建数据源,一句代码就完成} catch (Exception e) {throw new ExceptionInInitializerError(e);}}public static DataSource getDataSource() {return myDataSource;}public static Connection getConnection() throws SQLException {// return DriverManager.getConnection(url, user, password);return myDataSource.getConnection();}public static void free(ResultSet rs, Statement st, Connection conn) {try {if (rs != null)rs.close();} catch (SQLException e) {e.printStackTrace();} finally {try {if (st != null)st.close();} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null)try {conn.close();// myDataSource.free(conn);} catch (Exception e) {e.printStackTrace();}}}}}登录后复制4.测试public static void main(String[] args) throws Exception { for (int i = 0; i Connection conn = JdbcUtils.getConnection();System.out.println(conn);JdbcUtils.free(null, null, conn); }}
08-28 13:12