啥是c3p0?
连接池 ———— c3p0 、 druid
=连接 sql数据库 【省略了自己注册驱动、连接的3条】
=拿到DataSource
1.创建c3p0-config.xml
<c3p0-config>
<!--c3p0默认连接参数-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--数据库服务器路径 此处如要设置编码用到& 需转译&-->
<!--jdbc:mysql://localhost:3306/eesy?useUnicode=true&characterUncoding=utf-8-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/eesy</property>
<property name="user">root</property>
<property name="password">007</property>
<!--配置 初始化连接数-->
<property name="initialPoolSize">5</property>
<!--最大连接数-->
<property name="maxPoolSize">10</property>
<!--连接超时时间-->
<property name="checkoutTimeout">2000</property>
</default-config>
<!--连接池中 除以上默认的 ,还想配其他连接【如对表、选择orical等的改变】。
default要写,为保证连接池至少有1个可正常连接。
注:除开以上默认,标签为 name-config name=“xxx”、
以下连接其他表: 则all配置都和默认一样,仅修改表名:
url要更换的表名 demo2
-->
<!--cat用于在new了获取DataSource时传参找到此处-->
<name-config name="nihong">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--连接nihong数据库-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/nihong</property>
<property name="user">root</property>
<property name="password">007</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">2000</property>
</name-config>
</c3p0-config>
了解:
配置文件名、标签名 不可自己改。
我们写的代码中 根本没有读取c3p0配置文件的动作,
则肯定是 系统自动读取————new的连接池ComboPooledDataSource读取,
那 配置文件名、标签名 肯定是固定的不可自定义。
配置位置:
eclipse在src下 (根路径)
idea的maven项目,在resources下
2.创建工具类JDBCUtils
package utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**工具方法:
* 获取连接
* 关流
*/
public class JDBCUtils {
private static DataSource ds;
static {
//此处不传参————读取xml中默认
ds=new ComboPooledDataSource();
//读取标签属性name为nihong的配置
//ds=new ComboPooledDataSource("nihong");
}
/**
* 获取连接
* @return Connection
*/
public static Connection getCon() {
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 关流:
* 关2个、关3个 ————用重载
*
* 关流顺序:
* 先关闭ResultSet,
* 然后是Statement,
* 最后是Connetion。
* 刚好与创建相应对象时的顺序相反。
* @param st
* @param con
*/
//
public static void close2(Statement st,Connection con){
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close3(ResultSet rs, Statement st, Connection con){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
close2(st,con);
}
}
3.创建测试类:
package utilstest;
import sun.security.mscapi.RSACipher;
import utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCUtilsTest {
//声明3流
private static Connection con;
private static PreparedStatement ps;
private static ResultSet rs;
public static void main(String[] args) throws SQLException {
//搞查询
//为3流赋值
con = JDBCUtils.getCon();
String sql="select * from zhanghu";
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
//打印结果集 就只打印姓名吧
while (rs.next()){
System.out.println(rs.getObject("name"));
rs.getObject("pwd");
rs.getObject("money");
//列名数据类型是time也可用getObject、getString获取
}
JDBCUtils.close3(rs,ps,con);
}
}
4.maven项目中的pom.xml需要依赖的包:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wn</groupId>
<artifactId>woniuatm_0213</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>
</project>