您的位置:首页 > 职场人生

黑马程序员 JDBC_如何使用开源项目DBCP(实际项目中常用)(李勇老师)

2014-01-03 15:35 393 查看
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.Driver

url=jdbc:mysql://localhost:3306/jdbc

username=root

password=root

#<!-- 初始化连接 -->

initialSize=10

#最大连接数量

maxActive=50

#<!-- 最大空闲连接 -->

maxIdle=20

#<!-- 最小空闲连接 -->

minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->

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, SERIALIZABLE

defaultTransactionIsolation=READ_UNCOMMITTED

3.不需要再写数据源,直接用

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 < 10; i++) {

Connection conn = JdbcUtils.getConnection();

System.out.println(conn);

JdbcUtils.free(null, null, conn);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: