@Test
//数据库连接池DBCP
public void testDBCP(){
//创建连接池
BasicDataSource ds=new BasicDataSource();
//给连接池添加必要的属性
//可以将这些属性去掉set首字母小写,写在.properties文件中
ds.setUsername("root");
ds.setPassword("");
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///jsd");
//初始连接数
ds.setInitialSize(5);
//指定最大连接数,同一时刻可以向数据库申请的连接数
ds.setMaxActive(5);
//指定最小连接数:在数据库连接池中保存的最少的空闲的连接数量
ds.setMinIdle(5);
//等待数据库连接池,连接最长时间 ,单位为毫秒,超出该时间 将抛出异常
ds.setMaxWait(1000*5);
try {
String sql="select * from person where id=2";
//用5个线程,测试5秒后,MaxWait()的效果
Connection con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
new Thread(){
public void run(){
try {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
if(rs.next()){
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//数据库连接池DBCP
public void testDBCP(){
//创建连接池
BasicDataSource ds=new BasicDataSource();
//给连接池添加必要的属性
//可以将这些属性去掉set首字母小写,写在.properties文件中
ds.setUsername("root");
ds.setPassword("");
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///jsd");
//初始连接数
ds.setInitialSize(5);
//指定最大连接数,同一时刻可以向数据库申请的连接数
ds.setMaxActive(5);
//指定最小连接数:在数据库连接池中保存的最少的空闲的连接数量
ds.setMinIdle(5);
//等待数据库连接池,连接最长时间 ,单位为毫秒,超出该时间 将抛出异常
ds.setMaxWait(1000*5);
try {
String sql="select * from person where id=2";
//用5个线程,测试5秒后,MaxWait()的效果
Connection con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
con=ds.getConnection();
new Thread(){
public void run(){
try {
Connection con=ds.getConnection();
//Connection con=ds.getConnection();这段代码 ,报如下错误
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
PreparedStatement ps=con.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
if(rs.next()){
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
-----------------------------
根据查找资料:百度:内部类访问外部变量;
如果内部类调用了外部类中的变量,那么该变量必须申明为final类型,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期。