package dbutils; import java.beans.PropertyVetoException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.management.InstanceAlreadyExistsException; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import org.apache.commons.dbcp.DataSourceConnectionFactory; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mchange.v2.c3p0.PoolBackedDataSource; /** * JDBC工具类 * * @author Administrator * */ public class C3p0Utils { /* * 连接数据库的用户名 */ private String user = null; /* * 连接数据库的密码 */ private String password = null; /* * 连接数据库的地址 */ private String url = null; /* * 连接数据的驱动 */ private String driver = null; /* * 数据库链接工厂 */ private ComboPooledDataSource c3p0 = null; // 写构造函数 让其不能通过new 来创建对象 private C3p0Utils() { InputStream in = C3p0Utils.class.getClassLoader().getResourceAsStream( "db.properties"); Properties p = new Properties(); try { p.load(in); user = p.get("user").toString(); password = p.get("password").toString(); url = p.get("url").toString(); driver = p.get("driver").toString(); c3p0 = new ComboPooledDataSource(); // 设置用户名 //basicDataSource.setUsername(user); c3p0.setUser(user); // 设置密码 //basicDataSource.setPassword(password); c3p0.setPassword(password); // 设置地址 //basicDataSource.setUrl(url); c3p0.setJdbcUrl(url); // 设置数据库驱动 //basicDataSource.setDriverClassName(driver); c3p0.setDriverClass(driver); /* * //配置数据库的链接 //初始化连接:连接池启动时创建的初始化连接数量,1.2版本后支持 * c3p0.setInitialSize(10); * //最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制 * c3p0.setMaxActive(20); * //最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制 * c3p0.setMaxIdle(10); * //最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建 * c3p0.setMinIdle(10); */ // 新建一个数据库链接工厂 进行生产 //ConnectionFactory = new DataSourceConnectionFactory(basicDataSource); Class.forName(driver); } catch (IOException e) { System.out.println("配置文件读取失败!!!"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("连接驱动信息失败"); e.printStackTrace(); } catch (PropertyVetoException e) { e.printStackTrace(); } } private static C3p0Utils instance = null; // 通过单例模式 为了防止内存消耗过度, 当存在时,返回自己,不存在时,就创建, 只能new一个 public static C3p0Utils getInstance() { if (instance == null) { // 连接数据库 instance = new C3p0Utils(); } return instance; } /** * 获取数据库的连接 * * @return java.sql.Connection */ public Connection getConnection() { Connection conn = null; try { // 连接数据库 // conn = DriverManager.getConnection(url, user, password); conn = c3p0.getConnection(); } catch (SQLException e) { System.out.println("获取数据库连接失败 "); e.printStackTrace(); } return conn; } /** * 关闭资源 * * @param conn * @param stas * @param rs */ public void close(Connection conn, Statement stas, ResultSet rs) { try { if (rs != null) rs.close(); if (stas != null) stas.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }