/
package Ajdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
public class MyDataSource {
//数据源
private String url="jdbc:mysql://localhost:3306/task";
private String userName="root";
private String password="123456";
private String className="com.mysql.jdbc.Driver";
//连接池
LinkedList<Connection> connPoll=new LinkedList<>();
public MyDataSource() throws SQLException {
for (int i=0;i<10;i++){//创建十个连接,放入连接池
Connection conn= DriverManager.getConnection(url,userName,password);
connPoll.add(conn);
}
}
//从连接池中取连接
public Connection getConn(){
return connPoll.removeLast();
}
//把连接放回连接池
public void closeConn(Connection conn){
connPoll.addFirst(conn);
}
}
。
package Ajdbc1;
import jichu3.Stu;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class DBUtil {
public static String className="com.mysql.jdbc.Driver";
public static MyDataSource dataSource;//创建对象//声明自定义数据源
private DBUtil(){}//构造方法私有化
static { //静态代码块在类执行的时候就要初始化
try {
Class.forName(className);
//创建数据源对象,填充连接池中连接
dataSource = new MyDataSource();//创建对象(现在连接池中存在10个连接了)
}catch (Exception e){
e.printStackTrace();
}
}
//取连接
public static Connection getConn(){
/*Connection conn=null;
try {
conn= DriverManager.getConnection(url,userName,password);
}catch (Exception e){
e.printStackTrace();
}*/
//不用重新连接了,直接return出去就行了
//从数据源连接池中取连接:
return dataSource.getConn();
}
//关闭资源
public static void close(ResultSet rs, Statement stm,Connection conn){
if (rs!=null){
try{
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (stm!=null){
try{
stm.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (conn!=null){
try{
//conn.close();
dataSource.closeConn(conn);//把对象重新放回去//放回连接池
}catch (Exception e){
e.printStackTrace();
}
}
}
。
package Ajdbc1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Collections;
public class Test9 {
public static void main(String[] args) throws SQLException {
long begin=System.currentTimeMillis();
for (int i=0;i<5000;i++){
//用时10868
// Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/task","root","123456");
// conn.close();//关闭
//用时839
Connection conn=DBUtil.getConn();//getConn()是从连接池中拿的
DBUtil.close(null,null,conn);//放回
}
long end=System.currentTimeMillis();
System.out.println("用时"+(end-begin));//创建5000个连接
}
}