第一步:导入c3p0包

第二步:在classpath目录下,创建一个c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

<!-- 默认配置,只可以出现一次 -->

<default-config>

<!-- 连接超时设置30秒 -->

<property name="checkoutTimeout">30000</property>

<!-- 30秒检查一次connection的空闲 -->

<property name="idleConnectionTestPeriod">30</property>

<!--初始化的池大小 -->

<property name="initialPoolSize">2</property>

<!-- 最多的一个connection空闲时间 -->

<property name="maxIdleTime">30</property>

<!-- 最多可以有多少个连接connection -->

<property name="maxPoolSize">10</property>

<!-- 最少的池中有几个连接 -->

<property name="minPoolSize">2</property>

<!-- 批处理的语句

-->

<property name="maxStatements">50</property>

<!-- 每次增长几个连接 -->

<property name="acquireIncrement">3</property>

<property name="driverClass">com.mysql.jdbc.Driver</property>

<property name="jdbcUrl">

<![CDATA[jdbc:mysql://127.0.0.1:3306/db909?useUnicode=true&characterEncoding=UTF-8]]>

</property>

<property name="user">root</property>

<property name="password">1234</property>

</default-config>

</c3p0-config>

第三步:创建工厂类获取这个连接

package cn.itcast.utils;

import java.sql.Connection;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {

private static DataSource ds;

static{

ds = //默认的读取c3p0-config.xml中默认配置

new ComboPooledDataSource();

}

public static DataSource getDatasSource(){

return ds;

}

public static Connection getConn(){

Connection con = null;

try{

con = ds.getConnection();//每一次从ds中获取一个新的连接

}catch(Exception e){

e.printStackTrace();

}

return con;

}

}

ComboPooledDataSource有三个构造:

没有参数的.

接收一个boolean

默认的情况下,为true,即所有connection.autoCommit属性为true.

接收一个字符串的

在一个c3p0-config.xml文件中中,可以配置多种连接。 除了默认连接,其他都叫命名的连接。通过

<named-config name=”xxxx”/>

指定一个命名连接:

<!-- 默认配置,只可以出现一次 -->

<named-config name="db909">

<property name="checkoutTimeout">1000</property>

<property name="idleConnectionTestPeriod">30</property>

<property name="initialPoolSize">2</property>

<property name="maxIdleTime">30</property>

<property name="maxPoolSize">5</property>

<property name="minPoolSize">2</property>

<property name="maxStatements">50</property>

<property name="acquireIncrement">3</property>

<property name="driverClass">com.mysql.jdbc.Driver</property>

<property name="jdbcUrl">

<![CDATA[jdbc:mysql://127.0.0.1:3306/db909?useUnicode=true&characterEncoding=UTF-8]]>

</property>

<property name="user">root</property>

<property name="password">1234</property>

</named-config>

在代码中通过命名的连接连接数据库:

ds =

new ComboPooledDataSource("db909");

总结:

C3p0连接池,只有当用户获取连接时,才会包装Connection。

元数据分析

元数据,是指仅拥有Connection一个对象的情况下,分析得出数据库的所有信息。

DataBaseMetadate  - 说明数据库的信息。

ResultSetMetadate - 说明数据结果的类型信息的。核心。

如果要进行元数据分析,就必须要使用statement,preparedstatement.

List<Map> list = run.query(“select * from users”,new MapListHandler());

[{id=”U001”,Name=”Jack”,pwd=”ddd”}….]

List<Bean> list = run.query(“select * from users”,new BeanListHanderl<User>(User.class));

[User=[id=dd],,,,,]

将某个指定的数据库中的所有表及数据导出到excel中.

CREATE VIEW uc AS

SELECT u.name AS uname,c.name AS cname

FROM users u INNER JOIN contacts c ON u.id=c.uid;

1、用databasemetadate分析数据库的数据

public void dbm() throws Exception{

Connection con = DataSourceUtils.getConn();

DatabaseMetaData dm= con.getMetaData();

//     ResultSet rs= dm.getCatalogs();//获取所有数据库名称

//     while(rs.next()){

//         String name = rs.getString("TABLE_CAT");

//         System.err.println(name);

//     }

//     System.err.println("======================");

String dbName = dm.getDatabaseProductName();//数据库名称

System.err.println(dbName);

System.err.println("数据库中有多少表:");

ResultSet rs2 = dm.getTables("db909","db909",null,new String[]{"TABLE"});

while(rs2.next()){

String tableName = rs2.getString("TABLE_NAME");

System.err.println(tableName);

}

}

2、用ResultSetMetadate分析结果集

此类是用来分析查询的结果集:

分析有几个列,列名,列的类型是什么?

@Test

public void rs2() throws Exception{

Connection con = DataSourceUtils.getConn();

//转到exam数据库中去

Statement st = con.createStatement();

st.execute("use exam");

//查询

String sql = "select * from dept";

ResultSet rs = st.executeQuery(sql);

//对rs结果集进行分析

ResultSetMetaData rsmd=rs.getMetaData();

//获取有几个列

int cols = rsmd.getColumnCount();

System.err.println(cols);

//获取每一个字段名

List<String> colNames = new ArrayList<String>();//保存所有的字段

for(int i=0;i<cols;i++){

String colName = rsmd.getColumnName(i+1);

System.err.print(colName+"\t\t");

colNames.add(colName);

}

System.err.println();

//获取数据

while(rs.next()){

for(String nm:colNames){//遍历一行中的所列

String val = rs.getString(nm);

System.err.print(val+"\t\t");

}

System.err.println();

}

con.close();

}

java学习笔记—c3p0连接池与元数据分析(42)的更多相关文章

  1. java学习笔记—标准连接池的实现(27)

    javax.sql.DataSource. Java.sql.* DataSource 接口由驱动程序供应商实现.共有三种类型的实现: 基本实现 - 生成标准的 Connection 对象 – 一个D ...

  2. Java中使用C3P0连接池

    先看官网给的范例: import java.sql.*; import javax.naming.*; import javax.sql.DataSource; import com.mchange. ...

  3. 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal

    什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...

  4. java学习笔记—第三方数据库连接池包1(29)

    第一步:导入dbcp包 第二步:通过核心类连接数据 BasicDataSource它是javax.sql.DataSrouce的子类. 一个工具类:BasicDataSourceFactory. 手工 ...

  5. Spring之c3p0连接池配置和使用

    1.导入包:c3p0和mchange包 2.代码实现方式: package helloworld.pools; import com.mchange.v2.c3p0.ComboPooledDataSo ...

  6. C3P0连接池工具类实现步骤及方法

    C3P0连接池的工具类 使用C3P0获得连接对象连接池有一个规范接口 javax.sal.DataSourse 接口定义了一个从连接池中获得连接的方法getConnection(); 步骤导入jar包 ...

  7. java学习笔记之基础篇

    java选择语句之switch   //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...

  8. java学习笔记41(数据库连接池 C3p0连接池)

    在之前的学习中,我们发现,我们需要频繁的创建连接对象,用完之后还需要在关闭资源,因为这些连接对象都是占资源的,但是又不得不创建,比较繁琐,为了解决这种情况,Java出现了数据库连接池: 数据库连接池的 ...

  9. Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate

    连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...

随机推荐

  1. VB.Net与C# 的语法比较

    最近看代码或写代码时,经常把VB与C#的基本语法搞混,为方便查看,特对其异同进行对比: 變數初始化 VB.NET 自動將所有的變數初始化成 0 或 nothing.C# 在你未初始化變數之前不准你用該 ...

  2. HashMap,Hash优化与高效散列

    OverView Hash table based implementation of the Map interface. This implementation provides all of t ...

  3. 721. Accounts Merge合并电子邮件账户

    [抄题]: Given a list accounts, each element accounts[i] is a list of strings, where the first element  ...

  4. springboot中的任务(异步任务--定时任务--邮件任务)

    1.pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. ROS 消息发布器和订阅器Publisher, Subscriber

    博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...

  6. qt4代码到qt5代码出错

    1.error C2039: “toAscii”: 不是“QString”的成员 QT5.0.1把这个函数取消掉了,可以用toLatin1这个函数

  7. java反射机制学习代码

    根据 http://www.iteye.com/topic/137944 文档进行学习 代码如下: package reflectTest; import java.lang.reflect.*; i ...

  8. 20155209 2016-2017-2 《Java程序设计》第七周学习总结

    20155209 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 认识时间与日期 时间的度量 GMT(Greenwich Mean Time) 时间:现在不是 ...

  9. 06 Python字符编码与文件处理

    python垃圾回收机制: python中的垃圾回收机制是以引用计数为主,分代收集为辅,引用计数的缺陷是循环引用的问题,一个对象的引用数为0 ,那么这个对象就会被python虚拟机回收内存 字符编码 ...

  10. select for update [nowait]

    Syntax The NOWAIT and WAIT clauses let you tell the database how to proceed if the SELECT statement ...