当前位置:编程学习 > JAVA >>

关于数据库连接池

有下面两段代码都是用数据库连接池做的,(都是达内老师的上课的例子,第一段代码是宁老师教oracle时候演示数据库连接池的代码,第二段是梁老师教ssh时用的代码)。他们写的不太一样。我想就是不同的实现吧可能?就是条条大路通罗马。只要能把功能实现就可以了。我不理解的是:为什么第二段代码不像第一段代码一样, ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setPassword(password);
ds.setUsername(user);  把这写字段显示设置,我想问的就是他是不是  在properties配置文件去自动匹配?我现在只能这么理解了。不知道我有没有把我的问题讲清楚。要是这样的话, 只能像梁老师写的那样,ds = BasicDataSourceFactory.createDataSource(props);这样才行?或者说像宁老师这样,BasicDataSource ds = new BasicDataSource();我只能把url,user,password一个一个告诉ds才行?还有就是老师上课讲的ThreadLocal<Connection> connLocal我听不懂,他好像说同一个请求,一个线程,谁能帮我这几个疑问解决一下,特别的感谢。实在抱歉,我没分了。这是我全部的分。
//第一段代码

package cloud305.day02;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;

public class TestConnectionPool {

public static void main(String[] args) {
execute();

}

public static void execute() {
String driver = null;
String url = null;
String user = null;
String password = null;
BasicDataSource ds = new BasicDataSource();
Properties props = new Properties();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
props.load(new FileInputStream("db_mysql.properties"));
if (props != null) {
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
}
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setPassword(password);
ds.setUsername(user);
conn = ds.getConnection();
stmt = conn.createStatement();
String sql = "select count(*) from emp";
rs = stmt.executeQuery(sql);
if (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnectionUtils.closeResultSet(rs);
ConnectionUtils.closeStatement(stmt);
ConnectionUtils.closeConnection(conn);
}
}
}



//第二段代码

package tarena.dang.util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public final class DbUtil {
private static DataSource ds;
private static ThreadLocal<Connection> connLocal = new ThreadLocal<Connection>();

static {
try {
Properties props = new Properties();
props.load(DbUtil.class.getClassLoader().getResourceAsStream(
"dbcp.properties"));
ds = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
}
}

public static Connection getConnection(){
Connection conn = connLocal.get();
try {
if(conn == null){
 conn =  ds.getConnection();
connLocal.set(conn);
}
return conn;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}

public static void close(){
Connection conn = connLocal.get();
connLocal.set(null);
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args){
//测试
System.out.println(getConnection());
System.out.println(getConnection());
}

}


第二段代码用到的properties文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/dangdang
username=root
password=1234

initialSize=2

maxActive=10

maxIdle=2

minIdle=1

maxWait=30000

--------------------编程问答-------------------- 楼主应该把问题发到技术区。 --------------------编程问答-------------------- 不同的实现方式而已,一种是详细的将各属性一一设置,另外一种就是指定了配置文件,后一种由实现程序自己去找对应的参数。当然后一种使用的参数需要按照固定的格式写好。 --------------------编程问答--------------------
引用 1 楼 u011016388 的回复:
楼主应该把问题发到技术区。

我想发,不过我分不够,他不让我发了 --------------------编程问答--------------------
引用 2 楼 bigc2001 的回复:
不同的实现方式而已,一种是详细的将各属性一一设置,另外一种就是指定了配置文件,后一种由实现程序自己去找对应的参数。当然后一种使用的参数需要按照固定的格式写好。

谢谢,我也这么想的。那个ThreadLocal怎么理解呢?
补充:Java ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,