一:一个服务在操作数据库的操作的时候,连接和关闭资源是很消耗系统的资源,不能再每次用户操作数据库的时候,都需要重新建立连接和 关闭连接。
如果这样操作的话,对系统和用户来说,都会消耗大量的资源。所以操作数据库的时候,使用数据库连接池,在服务启动的时候,需要初始化连接,在用户调用的时候,会分配一个连接,用户使用完之后,会归还连接池。
这样就会避免减少系统开销和提升用户的体验。
现在一般使用连接池技术是Apache的dbcp技术。
工具类:
1 package pool_demo; 2 3 import org.apache.commons.dbcp2.BasicDataSource; 4 5 6 import javax.sql.DataSource;//注意的是扩展的javax 里的DataSource。 7 8 public class Jdbcutils { 9 private static BasicDataSource datasour=new BasicDataSource(); 10 static { 11 datasour.setDriverClassName("com.mysql.jdbc.Driver"); 12 datasour.setUrl("jdbc:mysql://192.168.147.146:3306/homework_day13"); 13 datasour.setUsername("test"); 14 datasour.setPassword("123456"); 15 datasour.setInitialSize(5);//初始化数据库连接数。 16 datasour.setMaxTotal(12);//最大连接数 需要注意在dbcp2.0的时候没有Maxactive 已经被替换setMaxTotal 17 datasour.setMinIdle(3);//最小空闲连接数。 18 datasour.setMaxIdle(5);//最大空闲连接数。 19 20 } 21 static DataSource get_Datasource(){ 22 return datasour; 23 } 24 }
测试代码:
1 package pool_demo; 2 3 import org.apache.commons.dbutils.QueryRunner; 4 5 import org.apache.commons.dbutils.handlers.ArrayListHandler; 6 7 import java.sql.SQLException; 8 import java.util.List; 9 10 public class pool_test { 11 public static void main(String ... args){ 12 db_Con.db_test(); 13 } 14 } 15 class db_Con{ 16 public static void db_test(){ 17 List<Object[]> rest; 18 try { 19 QueryRunner qr =new QueryRunner(Jdbcutils.get_Datasource()); 20 rest= qr.query("select * from system_user",new ArrayListHandler()); 21 22 }catch (SQLException ex){ 23 ex.printStackTrace( );//打印异常输出。 24 throw new RuntimeException("连接错误"+ex);//这样也可以打印。错误信息比较简明。 25 } 26 for (Object[] obj:rest){for (Object i:obj){System.out.print(i);} 27 28 } 29 } 30 }