1:写个资源配置文件【把数据库连接的几个属性配置到里边】
2:我这里使用的是mysql数据库
3:写个如下类:
4:进行测试
//连接池
private Vector<Connection> pool ;
private String driverClassName;
private String url;
private String username;
private String userpswd;
private int poolSize=1;
private static JDBC_连接池 instance =null;
private JDBC_连接池() {
init();
}
private void init(){
pool = new Vector<Connection>(poolSize);
readConfig();
addConnection();
}
public synchronized void release(Connection con){
pool.add(con);
}
public synchronized void closeAllPool(){
for (int i = 0; i < pool.size(); i++) {
try {
pool.get(i).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}
public synchronized Connection getConnection(){
if(pool.size()>0){
Connection con = pool.get(0);
pool.remove(con);
return con;
}else{
return null;
}
}
public static JDBC_连接池 getMyConnPool(){
if(instance == null){
return instance = new JDBC_连接池();
}else{
return instance;
}
}
public void addConnection(){
Connection conn = null;
for (int i = 0; i < poolSize; i++) {
try {
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, userpswd);
pool.add(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void readConfig(){
//这个东东有点马马虎虎,路经问题???
String path = System.getProperty("user.dir")+"//scr//dbpool.properties";
try {
FileInputStream is = new FileInputStream(path);
Properties p = new Properties();
p.load(is);
this.driverClassName = p.getProperty("driverClassName");
this.url = p.getProperty("url");
this.username = p.getProperty("username");
this.userpswd = p.getProperty("password");
this.poolSize=Integer.parseInt(p.getProperty("poolSize"));
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件读取错误!!!!");
}
}
测试代码 :
JDBC_连接池 j = JDBC_连接池.getMyConnPool();
for (int i = 0; i < 5; i++) {
Connection conn = j.getConnection();
System.out.println(conn.toString());
j.release(conn);//释放连接 这样的话,每次不停地释放,不会出现空指针异常了
}
如果超出配置文件的个数,就会出现空指针异常!