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

链接数据库的方式

[size=large][

1,直接连接数据库的情形:
public class DBUtil {

/**
* 单例模式创建数据库对象
*/
private static DBUtil instance=null;
private DBUtil(){}

//为了保证单例性,必须使用同步关键字
public synchronized static DBUtil getInstance(){
if(instance==null)
instance=new DBUtil();
return instance;
}
//连接必要的信息
public String driver="com.mysql.jdbc.Driver";
public String url="jdbc:mysql://localhost:3306/test";
public String username="root";
public String password="8921498YW";

public Connection getConnection(){
Connection conn=null;

try {
Class.forName(driver);
conn=DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

return conn;
}
//测试连接的效率
public static void main(String[] args) throws SQLException {

long begin=System.currentTimeMillis();//开始时刻
for(int i=0;i<1000;i++){//获得1000次连接
Connection conn=DBUtil.getInstance().getConnection();
conn.close();
}
long end=System.currentTimeMillis();
System.out.println("直接连接数据库所需要的时间:"+(end-begin));
//在我的机子上1000次直接连接耗时:12031
}

}

2, 使用DBCP连接池:
/**
* 数据库连接池:
* 它是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放
*
* DBCP是apache组织下的一个开源项目
* 需要两个jar包,commons-dbcp-1.2.2和commons-pool
* 这种连接池效率很高,但经常出现连接丢失现象,用的不是很多,用的多的是c3p0
* */
public class DBUtilOfDBCP {

private static BasicDataSource dataSource=null;//数据源
private static DataSourceConnectionFactory factory;//连接工厂
private static DBUtilOfDBCP instance=null;
private DBUtilOfDBCP(){

dataSource=new BasicDataSource();
//设置jdbc相关信息
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driver);
//连接池设置
dataSource.setInitialSize(20);//初始连接数
dataSource.setMaxActive(100);//最大获取连接数
dataSource.setMaxIdle(30);//最大可用空闲连接数
dataSource.setMinIdle(10);//最小可用空闲连接数

factory=new DataSourceConnectionFactory(dataSource);
}

//为了保证单例性,必须使用同步关键字
public synchronized static DBUtilOfDBCP getInstance(){
if(instance==null)
instance=new DBUtilOfDBCP();
return instance;
}
//连接必要的信息
public String driver="com.mysql.jdbc.Driver";
public String url="jdbc:mysql://localhost:3306/test";
public String username="root";
public String password="8921498YW";

public Connection getConnection() throws SQLException{
//使用工厂创建连接
return factory.createConnection();
}

public static void main(String[] args) throws SQLException {

long begin=System.currentTimeMillis();//开始时刻
for(int i=0;i<1000;i++){//获得1000次连接
Connection conn=DBUtilOfDBCP.getInstance().getConnection();
conn.close();
}
long end=System.currentTimeMillis();
System.out.println("DBCP连接数据库所需要的时间:"+(end-begin));
//在我的机子上1000次DBCP连接耗时:1000毫秒

}

}
3,使用C3P0连接池:
* C3P0,比较稳定
* 需要jar包:c3p0-0.9.1
public class DBUtilOfC3P0 {

private static ComboPooledDataSource dataSource;
private static DBUtilOfC3P0 instance=null;
private DBUtilOfC3P0(){

dataSource=new ComboPooledDataSource();
//设置jdbc连接信息
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setJdbcUrl(url);
try {
dataSource.setDriverClass(driver);
} catch (PropertyVetoException e) {

e.printStackTrace();
}
//设置连接池