c3p0数据库连接池实例

来源:互联网 发布:艾瑞咨询的数据 编辑:程序博客网 时间:2024/05/07 14:11

c3p0下载地址:http://download.csdn.net/detail/huhui_bj/6944595

这篇文章介绍的是,在普通Java Web工程中或者普通Java工程中使用c3p0数据库连接池的实例,c3p0的jar文件包括1个,网上说有3个都是误传!下面这个实例工程中,主要包括三个重要的文件:
C3P0ConnentionProvider.java       初始化c3p0数据库连接池

SQLHelper.java         通过数据库连接池,提供对数据库的增删改查功能

c3p0.properties  c3p0的配置文件

工程文件的截图如下:



c3p0.properties文件内容如下:

[plain] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #jdbc基本信息  
  2. driverClass=oracle.jdbc.driver.OracleDriver  
  3. jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:orcl  
  4. user=scott  
  5. password=tigger  
  6.   
  7. #c3p0连接池信息  
  8. c3p0.minPoolSize=3  
  9. c3p0.maxPoolSize=25  
  10.   
  11. #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数  
  12. c3p0.acquireIncrement=3  
  13. #定义在从数据库获取新连接失败后重复尝试的次数  
  14. c3p0.acquireRetryAttempts=60  
  15. #两次连接中间隔时间,单位毫秒  
  16. c3p0.acquireRetryDelay=1000  
  17. #连接关闭时默认将所有未提交的操作回滚   
  18. c3p0.autoCommitOnClose=false  
  19. #当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限  
  20. c3p0.checkoutTimeout=3000  
  21. #每120秒检查所有连接池中的空闲连接。Default: 0  
  22. c3p0.idleConnectionTestPeriod=120  
  23. #最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0    
  24. c3p0.maxIdleTime=600  
  25. #如果设为true那么在取得连接的同时将校验连接的有效性。Default: false    
  26. c3p0.testConnectionOnCheckin=false  
  27. #如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0  
  28. c3p0.maxStatements=8  
  29. #maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0  
  30. c3p0.maxStatementsPerConnection=5  


C3P0ConnentionProvider.java文件内容如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.hh.db;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.sql.Connection;  
  5. import java.sql.SQLException;  
  6. import java.util.Properties;  
  7.   
  8. import javax.sql.DataSource;  
  9.   
  10. import com.mchange.v2.c3p0.DataSources;  
  11.   
  12. /** 
  13.  * c3p0连接池管理类 
  14.  */  
  15. public class C3P0ConnentionProvider {  
  16.   
  17.     private static final String JDBC_DRIVER = "driverClass";  
  18.     private static final String JDBC_URL = "jdbcUrl";  
  19.   
  20.     private static DataSource ds;  
  21.     /** 
  22.      * 初始化连接池代码块 
  23.      */  
  24.     static {  
  25.         initDBSource();  
  26.     }  
  27.   
  28.     /** 
  29.      * 初始化c3p0连接池 
  30.      */  
  31.     private static final void initDBSource() {  
  32.         Properties c3p0Pro = new Properties();  
  33.         try {  
  34.             // 加载配置文件  
  35.             String path = C3P0ConnentionProvider.class.getResource("/").getPath();  
  36.             String websiteURL = (path.replace("/build/classes""").replace("%20"," ").replace("classes/""") + "c3p0.properties").replaceFirst("/""");  
  37.             FileInputStream in = new FileInputStream(websiteURL);  
  38.             c3p0Pro.load(in);  
  39.         } catch (Exception e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.   
  43.         String drverClass = c3p0Pro.getProperty(JDBC_DRIVER);  
  44.         if (drverClass != null) {  
  45.             try {  
  46.                 // 加载驱动类  
  47.                 Class.forName(drverClass);  
  48.             } catch (ClassNotFoundException e) {  
  49.                 e.printStackTrace();  
  50.             }  
  51.   
  52.         }  
  53.   
  54.         Properties jdbcpropes = new Properties();  
  55.         Properties c3propes = new Properties();  
  56.         for (Object key : c3p0Pro.keySet()) {  
  57.             String skey = (String) key;  
  58.             if (skey.startsWith("c3p0.")) {  
  59.                 c3propes.put(skey, c3p0Pro.getProperty(skey));  
  60.             } else {  
  61.                 jdbcpropes.put(skey, c3p0Pro.getProperty(skey));  
  62.             }  
  63.         }  
  64.   
  65.         try {  
  66.             // 建立连接池  
  67.             DataSource unPooled = DataSources.unpooledDataSource(c3p0Pro.getProperty(JDBC_URL), jdbcpropes);  
  68.             ds = DataSources.pooledDataSource(unPooled, c3propes);  
  69.   
  70.         } catch (SQLException e) {  
  71.             e.printStackTrace();  
  72.         }  
  73.     }  
  74.   
  75.     /** 
  76.      * 获取数据库连接对象 
  77.      *  
  78.      * @return 数据连接对象 
  79.      * @throws SQLException 
  80.      */  
  81.     public static synchronized Connection getConnection() throws SQLException {  
  82.         final Connection conn = ds.getConnection();  
  83.         conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);  
  84.         return conn;  
  85.     }  
  86. }  

SQLHelper.java文件内容如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 功能:提供统一的查询、修改和插入方法 
  3.  */  
  4. package com.hh.db;  
  5.   
  6. import java.sql.Connection;  
  7. import java.sql.PreparedStatement;  
  8. import java.sql.ResultSet;  
  9. import java.sql.ResultSetMetaData;  
  10. import java.util.ArrayList;  
  11. import java.util.List;  
  12.   
  13. public class SQLHelper {  
  14.     private Connection conn = null;  
  15.     private PreparedStatement ps = null;  
  16.     private ResultSet rs = null;  
  17.   
  18.     /** 
  19.      * 数据查询 
  20.      * @param sql语句 
  21.      * @return 返回结果集List<Object> 
  22.      */  
  23.     public List<Object> query(String sql) {  
  24.         if(sql.equals("") || sql == null){  
  25.             return null;  
  26.         }  
  27.         List<Object> list = new ArrayList<Object>();  
  28.         try {  
  29.             conn = C3P0ConnentionProvider.getConnection();  
  30.             ps = conn.prepareStatement(sql);  
  31.             rs = ps.executeQuery();  
  32.             ResultSetMetaData rsmd = rs.getMetaData();  
  33.             // 可以得到有多少列  
  34.             int columnNum = rsmd.getColumnCount();  
  35.             // 将数据封装到list中  
  36.             while (rs.next()) {  
  37.                 Object[] objects = new Object[columnNum];  
  38.                 for (int i = 0; i < objects.length; i++) {  
  39.                     objects[i] = rs.getObject(i + 1);  
  40.                 }  
  41.                 list.add(objects);  
  42.             }  
  43.         } catch (Exception e) {  
  44.             // TODO: handle exception  
  45.             e.printStackTrace();  
  46.         }  
  47.         return list;  
  48.     }  
  49.   
  50.     /** 
  51.      * 插入、修改数据操作 
  52.      * @param sql语句 
  53.      * @return boolean 成功返回true,失败返回false 
  54.      */  
  55.     public boolean update(String sql) {  
  56.         boolean b = false;  
  57.         if(sql.equals("") || sql == null){  
  58.             return b;  
  59.         }  
  60.         try {  
  61.             conn = C3P0ConnentionProvider.getConnection();  
  62.             ps = conn.prepareStatement(sql);  
  63.             int i = ps.executeUpdate();  
  64.             if (i == 1) {  
  65.                 b = true;  
  66.             }  
  67.         } catch (Exception e) {  
  68.             // TODO: handle exception  
  69.             e.printStackTrace();  
  70.         }  
  71.         return b;  
  72.     }  
  73.   
  74. }  

至于Demo.java文件,可提供参考的内容如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * SQLHelper的测试类 
  3.  *  
  4.  */  
  5. package com.hh.db;  
  6.   
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.   
  10.   
  11. public class Demo {  
  12.       
  13.     private SQLHelper sqlHelper = new SQLHelper();  
  14.       
  15.     /** 
  16.      * 测试query 
  17.      */  
  18.     /*public void testQuery(){ 
  19.         String sql = "select * from crh2_station where id = 1"; 
  20.         List list = sqlHelper.query(sql); 
  21.         List<Crh2Station> crh2StationList = new ArrayList<Crh2Station>(); 
  22.         //对查询结果进行封装 
  23.         for (int i = 0; i < list.size(); i++) { 
  24.             Object object[] = (Object[]) list.get(i); 
  25.             Crh2Station crh2Station = new Crh2Station(); 
  26.             crh2Station.setId(Integer.parseInt(object[0].toString())); 
  27.             crh2Station.setSlopeId(Integer.parseInt(object[1].toString())); 
  28.             crh2Station.setSlope(Double.parseDouble(object[2].toString())); 
  29.             crh2Station.setLength(Double.parseDouble(object[3].toString())); 
  30.             crh2Station.setEnd(Double.parseDouble(object[4].toString())); 
  31.             crh2Station.setHeight(Double.parseDouble(object[5].toString())); 
  32.             crh2StationList.add(crh2Station); 
  33.         } 
  34.         return crh2StationList; 
  35.     }*/  
  36.       
  37.     /** 
  38.      * 测试insert、update、delete 
  39.      */  
  40.     /*public void testInsertOrUpdate(){ 
  41.         String sql = "delete from crh2_station where id = 1"; 
  42.         boolean b = sqlHelper.update(sql); 
  43.         if(b){//b为true则操作成功 
  44.             System.out.println("操作成功"); 
  45.         }else{//b为false则操作失败 
  46.             System.out.println("操作失败"); 
  47.         } 
  48.     }*/  
  49.   


转自:http://blog.csdn.net/huhui_cs/article/details/19611493

0 0
原创粉丝点击