package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 数据库操作工具类
* @author lamp
*/
public class DBUtils {
private static ComboPooledDataSource ds=null;
private static Connection conn=null;
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/imooc.student?useUnicode=true&characterEncoding=UTF-8";
private static final String USERNAME = "root";
private static final String PASSWORD = "lingqi.zaq";
private DBUtils(){}
//静态初始化块进行初始化
static{
try {
ds = new ComboPooledDataSource();//创建连接池实例
ds.setDriverClass(DRIVER);//设置连接池连接数据库所需的驱动
ds.setJdbcUrl(URL);//设置连接数据库的URL
ds.setUser(USERNAME);//设置连接数据库的用户名
ds.setPassword(PASSWORD);//设置连接数据库的密码
ds.setMaxPoolSize(50);//设置连接池的最大连接数
ds.setMinPoolSize(2);//设置连接池的最小连接数
ds.setInitialPoolSize(10);//设置连接池的初始连接数
ds.setMaxStatements(100);//设置连接池的缓存Statement的最大数
} catch (Exception e) {
e.printStackTrace();
}
}
//定义一个获取数据库连接的方法
public static Connection getConnection(){
try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
System.out.println("获取连接失败");
}
return conn;
}
/**
* 关闭数据库连接
* @param rs
* @param stat
* @param conn
*/
//释放资源
public static void close(ResultSet rs,PreparedStatement ptmt,Connection conn){
if(null != rs){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(null != ptmt){
try {
ptmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//测试
public static void main(String[] args) {
Connection c = DBUtils.getConnection();
if(c!=null){
System.out.println("数据库连接成功");
try {
c.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("数据库连接失败");
}
}
}
这是小弟的数据库连接池代码
发现每次运行项目都会向数据库要好多个连接,而不是在已有的连接里面复用。
知道超过最大连接数后,整个程序就卡死了
是哪边没写对吗
相关分类