您好,欢迎访问三七文档
1,直接连接数据库的情形:publicclassDBUtil{/***单例模式创建数据库对象*/privatestaticDBUtilinstance=null;privateDBUtil(){}//为了保证单例性,必须使用同步关键字publicsynchronizedstaticDBUtilgetInstance(){if(instance==null)instance=newDBUtil();returninstance;}//连接必要的信息publicStringdriver=com.mysql.jdbc.Driver;publicStringurl=jdbc:mysql://localhost:3306/test;publicStringusername=root;publicStringpassword=8921498YW;publicConnectiongetConnection(){Connectionconn=null;try{Class.forName(driver);conn=DriverManager.getConnection(url,username,password);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}returnconn;}//测试连接的效率publicstaticvoidmain(String[]args)throwsSQLException{longbegin=System.currentTimeMillis();//开始时刻for(inti=0;i1000;i++){//获得1000次连接Connectionconn=DBUtil.getInstance().getConnection();conn.close();}longend=System.currentTimeMillis();System.out.println(直接连接数据库所需要的时间:+(end-begin));//在我的机子上1000次直接连接耗时:12031}}2,使用DBCP连接池:/***数据库连接池:*它是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放**DBCP是apache组织下的一个开源项目*需要两个jar包,commons-dbcp-1.2.2和commons-pool*这种连接池效率很高,但经常出现连接丢失现象,用的不是很多,用的多的是c3p0**/publicclassDBUtilOfDBCP{privatestaticBasicDataSourcedataSource=null;//数据源privatestaticDataSourceConnectionFactoryfactory;//连接工厂privatestaticDBUtilOfDBCPinstance=null;privateDBUtilOfDBCP(){dataSource=newBasicDataSource();//设置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=newDataSourceConnectionFactory(dataSource);}//为了保证单例性,必须使用同步关键字publicsynchronizedstaticDBUtilOfDBCPgetInstance(){if(instance==null)instance=newDBUtilOfDBCP();returninstance;}//连接必要的信息publicStringdriver=com.mysql.jdbc.Driver;publicStringurl=jdbc:mysql://localhost:3306/test;publicStringusername=root;publicStringpassword=8921498YW;publicConnectiongetConnection()throwsSQLException{//使用工厂创建连接returnfactory.createConnection();}publicstaticvoidmain(String[]args)throwsSQLException{longbegin=System.currentTimeMillis();//开始时刻for(inti=0;i1000;i++){//获得1000次连接Connectionconn=DBUtilOfDBCP.getInstance().getConnection();conn.close();}longend=System.currentTimeMillis();System.out.println(DBCP连接数据库所需要的时间:+(end-begin));//在我的机子上1000次DBCP连接耗时:1000毫秒}}3,使用C3P0连接池:*C3P0,比较稳定*需要jar包:c3p0-0.9.1publicclassDBUtilOfC3P0{privatestaticComboPooledDataSourcedataSource;privatestaticDBUtilOfC3P0instance=null;privateDBUtilOfC3P0(){dataSource=newComboPooledDataSource();//设置jdbc连接信息dataSource.setUser(username);dataSource.setPassword(password);dataSource.setJdbcUrl(url);try{dataSource.setDriverClass(driver);}catch(PropertyVetoExceptione){e.printStackTrace();}//设置连接池dataSource.setInitialPoolSize(30);dataSource.setMaxPoolSize(100);dataSource.setMinPoolSize(10);}//为了保证单例性,必须使用同步关键字publicsynchronizedstaticDBUtilOfC3P0getInstance(){if(instance==null)instance=newDBUtilOfC3P0();returninstance;}//连接必要的信息publicStringdriver=com.mysql.jdbc.Driver;publicStringurl=jdbc:mysql://localhost:3306/test;publicStringusername=root;publicStringpassword=8921498YW;publicConnectiongetConnection()throwsSQLException{//使用工厂创建连接returndataSource.getConnection();}publicstaticvoidmain(String[]args)throwsSQLException{longbegin=System.currentTimeMillis();//开始时刻for(inti=0;i1000;i++){//获得1000次连接Connectionconn=DBUtilOfC3P0.getInstance().getConnection();conn.close();}longend=System.currentTimeMillis();System.out.println(C3P0连接数据库所需要的时间:+(end-begin));//在我的机子上1000次C3P0连接耗时:1813毫秒}}
本文标题:数据库连接池
链接地址:https://www.777doc.com/doc-7032476 .html