zoukankan      html  css  js  c++  java
  • mysql数据库连接工具类C3P0

      1 package com.dl.network_flow.db;
      2 
      3 import java.sql.Connection; 
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.sql.ResultSetMetaData;
      7 import java.sql.SQLException;
      8 import java.sql.Statement;
      9 import java.sql.Timestamp;
     10 import java.util.ArrayList;
     11 import java.util.Date;
     12 import java.util.HashMap;
     13 import java.util.List;
     14 import java.util.Map;
     15 
     16 import org.apache.log4j.Logger;
     17 
     18 /*oracle和mysql的分页区别:
     19  * 1、语句的记录起始部分不一样,oralce是“记录查询结果的结束行”和“查询结果的开始行”,mysql是从“记录起始行”和“该页显示的条数”
     20  * 2、数据基数:oracle是从1开始,mysql是从0开始
     21  * */
     22 public class BaseDao {
     23 
     24     protected Logger log = Logger.getLogger(this.getClass());
     25 
     26     /**
     27      * 执行新增和修改的数据库操作,不用处理返回的ResultSet结果集
     28      * 
     29      * @param sql
     30      *            sql语句
     31      * @param params
     32      *            参数,若为日期,需要特别处理
     33      * @return
     34      */
     35     public int executeSql(String sql, Object[] params) {
     36         Connection connection = null;
     37         PreparedStatement preparedStatement = null;
     38         ResultSet resultSet = null;
     39 
     40         try {
     41             connection = ConnectionFactory.getInstance().getConnection();
     42             preparedStatement = connection.prepareStatement(sql);
     43             // log.debug("executeSql sql = " + sql);
     44             // log.debug("params = " + params);
     45             if (params != null) {
     46                 // 设置sql语句参数
     47                 for (int i = 0; i < params.length; i++) {
     48                     // log.debug("params[i] = " + params[i]);
     49                     if (params[i] != null) {
     50                         if (params[i] instanceof java.util.Date) {
     51                             preparedStatement
     52                                     .setTimestamp(i + 1, new Timestamp(
     53                                             ((Date) params[i]).getTime()));
     54                         } else {
     55                             preparedStatement.setObject(i + 1, params[i]);
     56                         }
     57                     } else {
     58                         preparedStatement.setString(i + 1, "");
     59                     }
     60                 }
     61             }
     62             return preparedStatement.executeUpdate();
     63         } catch (SQLException e) {
     64             log.error(e.getMessage() + "code = " + e.getErrorCode()+",sql:"+sql);
     65             // /throw new RuntimeException(e.getMessage() + "code = " +
     66             // e.getErrorCode());
     67             return -1;
     68         } finally {
     69             ConnectionFactory.getInstance().closeConnection(connection,
     70                     preparedStatement, resultSet);
     71         }
     72 
     73     }
     74 
     75     /*
     76      * 批量执行sql语句 paramsArr是个2维数组,第一维度表示各条记录,第二维度表示各条记录里的各个parameter值
     77      */
     78     public int[] executeBatchSql(String sql, Object[][] paramsArr) {
     79         Connection connection = null;
     80         PreparedStatement preparedStatement = null;
     81         ResultSet resultSet = null;
     82         try {
     83             connection = ConnectionFactory.getInstance().getConnection();
     84             preparedStatement = connection.prepareStatement(sql);
     85 
     86             if (paramsArr != null) {
     87                 for (int s = 0; s < paramsArr.length; s++) {
     88                     Object[] params = paramsArr[s];
     89                     if (params != null) {
     90                         // 设置sql语句参数
     91                         for (int i = 0; i < params.length; i++) {
     92                             if (params[i] != null) {
     93                                 if (params[i] instanceof java.util.Date) {
     94                                     preparedStatement.setTimestamp(
     95                                             i + 1,
     96                                             new Timestamp(((Date) params[i])
     97                                                     .getTime()));
     98                                 } else {
     99                                     preparedStatement.setObject(i + 1,
    100                                             params[i]);
    101                                 }
    102                             } else {
    103                                 preparedStatement.setString(i + 1, "");
    104                             }
    105                         }
    106                         preparedStatement.addBatch();// /批量增加1条
    107                     }
    108                 }
    109             }
    110             return preparedStatement.executeBatch();// /批量执行
    111         } catch (SQLException e) {
    112             e.printStackTrace();
    113 //            log.error(e.getMessage() + "code = " + e.getErrorCode());
    114             log.error(e.getMessage() + "code = " + e.getErrorCode()+",sql:"+sql);
    115         } finally {
    116             ConnectionFactory.getInstance().closeConnection(connection,preparedStatement, resultSet);
    117         }
    118         return null;
    119     }
    120     
    121     /**
    122      *   批量执行不同的sql语句 不包含查询
    123      * executeBatchSql
    124      * @time 2015年9月23日下午4:23:16
    125      * @packageName com.dl.ios6
    126      * @param sql  多个sql语句的数组
    127      * @return
    128      */
    129     public int[] executeBatchSql(String[] sql){
    130         Connection connection = null;
    131         PreparedStatement preparedStatement = null;
    132         ResultSet resultSet = null;
    133         
    134         connection = ConnectionFactory.getInstance().getConnection();
    135         Statement state = null;
    136         try {
    137             if(sql!=null&&sql.length>0){
    138                 boolean autoCommit = connection.getAutoCommit();
    139                 connection.setAutoCommit(false);
    140                 state = connection.createStatement();
    141                 for (int i = 0; i < sql.length; i++) {
    142                     state.addBatch(sql[i]);
    143                 }
    144                 int j[] = state.executeBatch();
    145                 connection.commit();
    146                 connection.setAutoCommit(autoCommit);
    147                 state.close();
    148                 ConnectionFactory.getInstance().closeConnection(connection, preparedStatement, resultSet);
    149                 return j;
    150             }
    151         } catch (SQLException e) {
    152             state = null;
    153             ConnectionFactory.getInstance().closeConnection(connection, preparedStatement, resultSet);
    154         }
    155         return null;
    156     }
    157     
    158 
    159     /*
    160      * 批量执行sql语句 paramsArr是个2维数组,第一维度表示各条记录,第二维度表示各条记录里的各个parameter值
    161      */
    162     public int[] executeBatchSql(String sql, List<Object[]> paramsList) {
    163         Connection connection = null;
    164         PreparedStatement preparedStatement = null;
    165         ResultSet resultSet = null;
    166         try {
    167 
    168             connection = ConnectionFactory.getInstance().getConnection();
    169             preparedStatement = connection.prepareStatement(sql);
    170 
    171             if (paramsList == null){
    172                 return null;
    173             }
    174             // /遍历所有记录
    175             for (int i = 0; i < paramsList.size(); i++) {
    176                 Object[] tObj = paramsList.get(i);
    177                 if (tObj == null) {
    178                     continue;
    179                 }
    180                 // /遍历记录中的每个字段
    181                 for (int j = 0; j < tObj.length; j++) {
    182                     Object curObj = tObj[j];
    183                     if (curObj != null) {
    184                         if (curObj instanceof java.util.Date) {
    185                             preparedStatement.setTimestamp(j + 1,
    186                                     new Timestamp(((java.util.Date) curObj).getTime()));
    187                         } else {
    188                             preparedStatement.setObject(j + 1, curObj);
    189                         }
    190                     } else{
    191                         preparedStatement.setString(j + 1, "");
    192                     }
    193                 }// /遍历记录中的每个字段
    194                 preparedStatement.addBatch();// /添加一条记录
    195             }// /遍历所有记录
    196 
    197             return preparedStatement.executeBatch();// /批量执行
    198         } catch (SQLException e) {
    199             e.printStackTrace();
    200             log.error(e.getMessage() + "code = " + e.getErrorCode()+",sql:"+sql);
    201         } finally {
    202             ConnectionFactory.getInstance().closeConnection(connection,
    203                     preparedStatement, resultSet);
    204         }
    205         return null;
    206     }
    207 
    208     /*
    209      * 执行sql操作,把sql和params结合成一个sql语句
    210      * 执行sql查询的结果集交给sqlExecute这个接口函数处理,处理后封装的对象放到List里
    211      */
    212     public List<Map<String, Object>> queryForList(String sql, Object[] params) {
    213         Connection connection = null;
    214         PreparedStatement preparedStatement = null;
    215         ResultSet resultSet = null;
    216 
    217         try {
    218             connection = ConnectionFactory.getInstance().getConnection();
    219             preparedStatement = connection.prepareStatement(sql);
    220             // 设置sql语句参数
    221             if (params != null) {
    222                 for (int i = 0; i < params.length; i++) {
    223                     // log.debug("params[i] = " + params[i]);
    224                     preparedStatement.setObject(i + 1, params[i]);
    225                 }
    226             }
    227             resultSet = preparedStatement.executeQuery();
    228             ResultSetMetaData md = resultSet.getMetaData(); // 得到结果集(rs)的结构信息,比如字段数、字段名等
    229             int columnCount = md.getColumnCount();
    230             List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    231             Map<String, Object> rowData = new HashMap<String, Object>();
    232             while (resultSet.next()) {
    233                 rowData = new HashMap<String, Object>(columnCount);
    234                 for (int i = 1; i <= columnCount; i++) {
    235                     rowData.put(md.getColumnLabel(i), resultSet.getObject(i));
    236                 }
    237                 list.add(rowData);
    238             }
    239 
    240             return list;
    241         } catch (SQLException e) {
    242 //            log.error(e.getMessage());
    243             log.error(e.getMessage() + "code = " + e.getErrorCode()+",sql:"+sql);
    244         } finally {
    245             ConnectionFactory.getInstance().closeConnection(connection,
    246                     preparedStatement, resultSet);
    247         }
    248         return null;
    249     }
    250     
    251     
    252     public Map<String, Object> queryForMap(String sql, Object[] params) {
    253         Connection connection = null;
    254         PreparedStatement preparedStatement = null;
    255         ResultSet resultSet = null;
    256 
    257         try {
    258             connection = ConnectionFactory.getInstance().getConnection();
    259             preparedStatement = connection.prepareStatement(sql);
    260             // 设置sql语句参数
    261             if (params != null) {
    262                 for (int i = 0; i < params.length; i++) {
    263                     // log.debug("params[i] = " + params[i]);
    264                     preparedStatement.setObject(i + 1, params[i]);
    265                 }
    266             }
    267             resultSet = preparedStatement.executeQuery();
    268             ResultSetMetaData md = resultSet.getMetaData(); // 得到结果集(rs)的结构信息,比如字段数、字段名等
    269             int columnCount = md.getColumnCount();
    270             Map<String, Object> rowData = new HashMap<String, Object>();
    271             while (resultSet.next()) {
    272                 rowData = new HashMap<String, Object>(columnCount);
    273                 for (int i = 1; i <= columnCount; i++) {
    274                     rowData.put(md.getColumnLabel(i), resultSet.getObject(i));
    275                 }
    276                 break;
    277             }
    278 
    279             return rowData;
    280         } catch (SQLException e) {
    281             log.error(e.getMessage() + "code = " + e.getErrorCode()+",sql:"+sql);
    282         } finally {
    283             ConnectionFactory.getInstance().closeConnection(connection,preparedStatement, resultSet);
    284         }
    285         return null;
    286     }
    287     
    288 }
      1 package com.dl.network_flow.db;
      2 
      3 import java.beans.PropertyVetoException;
      4 import java.sql.Connection;
      5 import java.sql.PreparedStatement;
      6 import java.sql.ResultSet;
      7 import java.sql.SQLException;
      8 import com.dl.network_flow.utils.PropertyUtils;
      9 import com.mchange.v2.c3p0.ComboPooledDataSource;
     10 /*使用C3P0连接池
     11  * 从C3P0连接池ComboPooledDataSource中获得Connection
     12  * 关闭Connection
     13  * */
     14 public class ConnectionFactory
     15 {
     16 
     17 //    private static Logger log = Logger.getLogger(ConnectionFactory.class);
     18 
     19     public static ConnectionFactory connectionFactory = new ConnectionFactory();
     20 
     21     private ComboPooledDataSource ds; ///C3P0连接池
     22 
     23     ///初始化数据库连接池的参数:5个
     24     ///给C3P0连接池指定DriverClass、JdbcUrl、User、Password、InitialPoolSize、MaxPoolSize、CheckoutTimeout
     25     private ConnectionFactory() {
     26         ds = new ComboPooledDataSource();
     27         try {
     28             String DriverClass = PropertyUtils.getValue("DriverClass");
     29             //log.debug("DriverClass = " + DriverClass);
     30             if (DriverClass != null) {
     31                 ds.setDriverClass(DriverClass);
     32             }
     33         }
     34         catch (PropertyVetoException e) {
     35         }
     36         String JdbcUrl = PropertyUtils.getValue("JdbcUrl");
     37         //log.debug("JdbcUrl = " + JdbcUrl);
     38         if (JdbcUrl != null) {
     39             ds.setJdbcUrl(JdbcUrl);
     40         }
     41 
     42 
     43         String User = PropertyUtils.getValue("User");
     44         //log.debug("User = " + User);
     45         if (User != null) {
     46             ds.setUser(User);
     47         }
     48 
     49         String Password = PropertyUtils.getValue("Password");
     50         //log.debug("Password = " + Password);
     51         if (Password != null) {
     52             ds.setPassword(Password);
     53         }
     54 
     55         String InitialPoolSize = PropertyUtils.getValue("InitialPoolSize");
     56         //log.debug("InitialPoolSize = " + InitialPoolSize);
     57         if (InitialPoolSize != null) {
     58             ds.setInitialPoolSize(Integer.parseInt(InitialPoolSize));
     59         }
     60 
     61         String MaxPoolSize = PropertyUtils.getValue("MaxPoolSize");
     62         //log.debug("MaxPoolSize = " + MaxPoolSize);
     63         if (MaxPoolSize != null) {
     64             ds.setMaxPoolSize(Integer.parseInt(MaxPoolSize));
     65         }
     66 
     67         String CheckoutTimeout = PropertyUtils.getValue("CheckoutTimeout");
     68         //log.debug("CheckoutTimeout = " + CheckoutTimeout);
     69         if (CheckoutTimeout != null) {
     70            ds.setCheckoutTimeout(Integer.parseInt(CheckoutTimeout));
     71         }
     72         
     73         String MaxIdleTime = PropertyUtils.getValue("MaxIdleTime");
     74         if(MaxIdleTime != null){
     75              ds.setMaxIdleTime(Integer.parseInt(MaxIdleTime));
     76         }
     77         
     78     }
     79 
     80     public static ConnectionFactory getInstance() {
     81         return connectionFactory;
     82     }
     83 
     84     /**
     85      * 获得数据库连接
     86      *
     87      * @return
     88      */
     89     public Connection getConnection() {
     90         try {
     91             
     92             return ds.getConnection();
     93         } catch (SQLException e) {
     94             throw new RuntimeException(e.getMessage() + "code = " + e.getErrorCode());
     95         } 
     96     }
     97 
     98     /**
     99      * 关闭数据库连接
    100      *
    101      * @param connection
    102      * @param prepareStatement
    103      * @param resultSet
    104      */
    105     public void closeConnection(Connection connection, PreparedStatement prepareStatement, ResultSet resultSet) {
    106 
    107         try {
    108             if (resultSet != null) {
    109                 resultSet.close();
    110             }
    111             if (prepareStatement != null) {
    112                 prepareStatement.close();
    113             }
    114             if (connection != null) {
    115                 connection.close();
    116             }
    117         } catch (SQLException e) {
    118             throw new RuntimeException(e.getMessage() + "code = " + e.getErrorCode());
    119         }
    120     }
    121 
    122     public static void main(String[] args)
    123     {
    124         
    125     }
    126 }
     1 package com.dl.network_flow.utils;
     2 
     3 
     4 import java.io.BufferedReader;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.InputStreamReader;
     8 import java.util.Properties;
     9 
    10 /**
    11  * Created by IntelliJ IDEA.
    12  * User: Administrator
    13  * Date: 2010-4-23
    14  * Time: 18:02:11
    15  * To change this template use File | Settings | File Templates.
    16  */
    17 public class PropertyUtils {
    18     private Properties pro = new Properties();
    19     private static PropertyUtils propertyUtils = new PropertyUtils();
    20 
    21     private PropertyUtils() {
    22         InputStream in = null;
    23         try {
    24 //          pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
    25             in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
    26             BufferedReader bf = new BufferedReader(new InputStreamReader(in));  
    27             pro.load(bf);
    28         } catch (IOException e) {
    29             throw new RuntimeException(e.getMessage());
    30         } finally {
    31             try {
    32                 if(in!=null){
    33                     in.close();
    34                 }
    35             } catch (IOException e) {
    36             }
    37         }
    38     }
    39 
    40     public static PropertyUtils getInstance(){
    41         return propertyUtils;
    42     }
    43 
    44     public static String getValue(String key) {
    45             return (String)getInstance().pro.get(key);
    46     }
    47 
    48     public static void main(String[] args) throws Exception {
    49         System.out.println(getValue("abcd"));
    50     }
    51 
    52 }

    db.properties 文件内容

    #本地
    JdbcUrl=jdbc:mysql://IP地址:3306/数据库名称?autoReconnect=true&autoReconnectForPools=true
    DriverClass=com.mysql.jdbc.Driver
    User=用户名
    Password=数据库密码

    #初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 initialPoolSize
    InitialPoolSize=15

    #连接池中保留的最大连接数。Default: 15 maxPoolSize
    MaxPoolSize=30
    #sp计费信息实时入库,每次入库的数量
    spsynCacheSize=30

    #最大空闲时间
    MaxIdleTime=120

  • 相关阅读:
    windows phone 自动隐藏的Popup from http://www.cnblogs.com/LoveJenny/archive/2011/07/14/2105869.html
    Linq update
    Windows Phone 7 MVVM模式数据绑定和传递参数 from:http://www.cnblogs.com/linzheng/archive/2011/03/27/1997086.html
    web 常见攻击与防护
    SFSA
    HDU 3530
    一笔话问题
    学习技巧
    练题宝典
    雪花
  • 原文地址:https://www.cnblogs.com/zfy0098/p/5502620.html
Copyright © 2011-2022 走看看