1 import com.mchange.v2.c3p0.ComboPooledDataSource;
2 import javax.sql.DataSource;
3 import java.sql.*;
4
5 public class C3P0Utils {
6 //创建C3P0数据源(连接池)
7 private static DataSource dataSource = new ComboPooledDataSource();
8
9 /**
10 * 从dataSource(连接池) 获得连接对象
11 */
12 public static Connection getConnection() throws Exception {
13 Connection connection = dataSource.getConnection();
14 return connection;
15 }
16
17 /**
18 * 获得连接池
19 *
20 */
21 public static DataSource getDataSource(){
22 return dataSource;
23 }
24
25 /**
26 * 增删改都需要获取连接,关闭连接,只是SQL语句不同
27 * 我们可以使用元数据来自动给
28 * SQL设置参数,合并成一个方法。
29 *
30 * String sql:sql语句
31 * Object[] params:参数数组
32 */
33 public static int update(String sql,Object[] params){
34 try {
35 Connection conn = getConnection();
36 PreparedStatement ps = conn.prepareStatement(sql);
37 //获取到参数个数
38 ParameterMetaData metaData = ps.getParameterMetaData();
39 int count = metaData.getParameterCount(); //参数的个数
40
41 for (int x = 0; x < count; x++) {
42 //将参数赋值给对应的 ? 号
43 ps.setObject(x + 1,params[x]);
44 }
45 return ps.executeUpdate();
46
47 } catch (Exception e) {
48 e.printStackTrace();
49 }
50 return -1;
51 }
52
53
54 /**
55 * 释放资源
56 * resultSet
57 * statement
58 * connection
59 */
60 public static void release(ResultSet resultSet, Statement statement, Connection connection) {
61 if (resultSet != null) {
62 try {
63 resultSet.close();
64 } catch (SQLException e) {
65 e.printStackTrace();
66 }
67 }
68 if (statement != null) {
69 try {
70 resultSet.close();
71 } catch (SQLException e) {
72 e.printStackTrace();
73 }
74 }
75 if (connection!= null){
76 try {
77 connection.close();//看Connection来自哪里, 如果Connection是从连接池里面获得的, close()方法其实是归还; 如果Connection是创建的, 就是销毁
78 } catch (SQLException e) {
79 e.printStackTrace();
80 }
81 }
83 }
85 }
86
87
88
89 C3P0配置文件(c3p0-config.xm)
90
91 <c3p0-config>
92 <default-config>
93 <property name="driverClass">com.mysql.jdbc.Driver</property>
94 <property name="jdbcUrl">jdbc:mysql://localhost:3306/XXX(数据库名称)</property>
95 <property name="user">用户名</property>
96 <property name="password">密码</property>
97 <property name="initialPoolSize">5</property>
98 </default-config>
99 </c3p0-config>