Maven项目中c3p0连接数据库及实例

来源:互联网 发布:天津中为数据 编辑:程序博客网 时间:2024/06/03 22:38

1)在src目录下新建c3p0-config.xml

内容为

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
      <named-config name="mvcApp">
        <property name="user">root</property>
          <property name="password">123456</property>
          <property name="driverClass">com.mysql.jdbc.Driver</property>
          <property name="jdbcUrl">jdbc:mysql://localhost:3306/java?useUnicode=true&amp;serverTimezone=UTC&amp;characterEncoding=UTF-8</property>
        <!-- 以上的user是数据库的用户,
            password是数据库的密码,driverClass是mysql的数据库驱动,
            jdbcUrl是连接数据库的url -->  
       <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
        <property name="acquireIncrement">5</property>
        <!--初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间 -->
        <property name="initialPoolSize">10</property>
        <!--连接池中保留的最小连接数 -->
        <property name="minPoolSize">10</property>
        <!--连接池中保留的最大连接数 -->
        <property name="maxPoolSize">50</property>
        <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
        <property name="maxStatements">20</property>
        <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
        <property name="maxStatementsPerConnection">5</property>
  </named-config>
</c3p0-config>

2)在pom.xml中添加依赖

<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>

3)新建JDBCUtils工具类

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtils {
    /**
     * 释放连接
     * @param connection
     */
    public static void releaseConnection(Connection connection) {
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static DataSource dataSource = null;

    static {
        // dataSource资源只能初始化一次
        dataSource = new ComboPooledDataSource("mvcApp");
    }

    /**
     * 获取连接
     *
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
}

4)测试

数据库中新建employee表(emp_id自增)


创建测试类

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCTest {
    public static void main(String[] args) {
        new JDBCTest().test1();
    }

    public void test4() {
        try {
            Connection con = JDBCUtils.getConnection(); // 声明Connection对象
            PreparedStatement sql = con.prepareStatement("select * from employee"); // 声明PreparedStatement对象
            ResultSet res = sql.executeQuery(); // 声明ResultSet对象
            while(res.next()) {
                System.out.println(res.getString(1) + "---" + res.getString(2) + "---" + res.getString(3));
            }
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
这就是c3p0的简单实例