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