DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar
由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用
完后再放回去。
获取数据库连接的类:DbcpConnection.java
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class DbcpConnection { private static DataSource dataSource; private static Connection connection; public static void initDataSource(){ FileInputStream is = null; Properties properties = new Properties(); String driverClassName = null; String url = null; String username = null; String password = null; int initialSize = 0; int minIdle = 0; int maxIdle = 0; int maxWait = 0; int maxActive = 0; try { String path = System.getProperty("user.dir")+"\\src\\com\\xiami\\db\\connection\\"; is = new FileInputStream(path+"dbcp.properties"); properties.load(is); driverClassName = properties.getProperty("dbcp.driverClassName"); url = properties.getProperty("dbcp.url"); username = properties.getProperty("dbcp.username"); password = properties.getProperty("dbcp.password"); initialSize = Integer.parseInt((properties.getProperty("dbcp.initialSize").trim())); minIdle = Integer.parseInt((properties.getProperty("dbcp.minIdle")).trim()); maxIdle = Integer.parseInt((properties.getProperty("dbcp.maxIdle")).trim()); maxWait = Integer.parseInt((properties.getProperty("dbcp.maxWait")).trim()); maxActive = Integer.parseInt((properties.getProperty("dbcp.maxActive")).trim()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException ioe){ ioe.printStackTrace(); }finally{ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } BasicDataSource bds = new BasicDataSource(); bds.setUrl(url); bds.setDriverClassName(driverClassName); bds.setUsername(username); bds.setPassword(password); bds.setInitialSize(initialSize); bds.setMaxActive(maxActive); bds.setMinIdle(minIdle); bds.setMaxIdle(maxIdle); bds.setMaxWait(maxWait); dataSource = bds; } public static Connection getConnection() throws SQLException { if (dataSource == null) { initDataSource(); } Connection conn = null; if (dataSource != null) { conn = dataSource.getConnection(); } return conn; } }
连接数据库信息的配置文件:dbcp.properties
dbcp.driverClassName=com.ibm.db2.jcc.DB2Driver dbcp.url=jdbc\:db2\://192.168.3.11\:50000/DBNAME dbcp.username=db2admin dbcp.password=password dbcp.initialSize=30 dbcp.minIdle=10 dbcp.maxIdle=10 dbcp.maxWait=1000 dbcp.maxActive=30
在Service层使用的时候:ZhiDianJieDu.java (业务逻辑处理的类)
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.xiami.db.connection.DbcpConnection; public class ZhiDianJieDu { DbcpConnection dbcpcon = new DbcpConnection(); Connection conn = null; PreparedStatement pst = null; ResultSet rs = null; String ZLJGBM = null; //通过A机构编码获得B机构代码 public void getZLJGBMFromDRJGBM(String DRJGBM){ String sql = "select ZLJGBM from T_CONTRAST_ZL_TO_NEUSOFT where DRJGBM = '"+DRJGBM+"'"; try { conn = dbcpcon.getConnection(); pst = conn.prepareStatement(sql); rs = pst.executeQuery(); while(rs.next()){ ZLJGBM = rs.getString("ZLJGBM"); } System.out.println(ZLJGBM); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }