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

时间: 2024-10-06 00:32:00

mysql数据库连接工具类C3P0的相关文章

数据库连接工具类 数据库连接工具类——仅仅获得连接对象 ConnDB.java

package com.util; import java.sql.Connection; import java.sql.DriverManager; /** * 数据库连接工具类——仅仅获得连接对象 * */ public class ConnDB { private static Connection conn = null; private static final String DRIVER_NAME = "com.mysql.jdbc.Driver"; private st

数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java

package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @className: ConnUtil.java * @classDescription: 数据库连接工具类——包含取得连接和关闭资源 * @fun

使用配置文件的方式构建数据库连接工具类范例(DBCP)

dbcp.propertise内容: dirver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://数据库地址:3306/jdbctest username=root password=数据库密码 InitialSize=3 MaxTotal=5 MaxWaitMillis=3000 DBCPUtil.java package dbcptest; /** * 数据库连接工具类,每次调用会返回数据库连接对象 * 使用配置文件的方式方便更改数据库配置信息 * *

php pdo mysql数据库操作类

原文:php pdo mysql数据库操作类 findAll(array( 'field'=>'ID,albumName,albumImage, mainActor,directors,tags,info,area, keywords,wflag,year,mod_version,totalDuration', 'where'=>$where, 'order'=>'flag desc,hit_count desc', 'limit'=>"{$limit['offset']

设计模式 - 单例模式mysql数据库操作类

待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php'; $db = MySQLDB::getInstance('127.0.0.1:3306', 'root', '123456', 'test'); $db->insertData(); instance.php 单例操作类: <?php /** * 单例模式MySQL数据库操作类 */ clas

MySQL数据库操作类(PHP实现,支持连贯操作)

使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利.(注:sql还是很重要的,不要因为用了框架就把原先的忘了). 而在笔者使用php操作redis实现后台任务的过程中,也想要借助这种便利,但无奈redis操作单独的类,直接访问其中的controller文件的话,总是会提示M方法失败,导致此模型方法不能使用.

MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Text; p

php中mysql数据库操作类

talk less and show code: <?php/** *以下代码用于数据库操作类的封装* * @author rex<[email protected]> * @version 1.0* @since 2015*/ class Mysql{ //数据库连接返回值 private $conn; /*** [构造函数,返回值给$conn]* @param [string] $hostname [主机名]* @param [string] $username[用户名]* @par

【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)

上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完善,在每一个方法中还需要自己声明mysql的$con对象,同时自己关闭 mysql的$con对象.这样,如果查询方法一多,再无缘无故地增加了许多声明$con对象与关闭$con对象的代码.其实完全可以利用php的构造函 数与析构函数给数据库类各个查询方法的注入$con对象,同时自动在每次查询之后自动回收$con