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);//释放连接 这样的话,每次不停地释放,不会出现空指针异常了 }
如果超出配置文件的个数,就会出现空指针异常!