第一步:导入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. ArrayList原理(一)

    需要使用到动态数组的时候用的最多的就是ArrayList了,底层其实是Object数组,以下demo基于JDK1.8: List<Integer> list  = new ArrayLis ...

  2. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    实现EXCEL导入功能:web网站,excel导入用OLEDB同样会报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 报错信息: Exception caught. ...

  3. interrupt()方法的简单理解

    interrupt() 方法只是改变中断状态而已,它不会中断一个正在运行的线程.这一方法实际完成的是,给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态.更确切的说,如果线程被Objec ...

  4. 46. Permutations (Back-Track,Sort)

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  5. react-native 打包 出apk

    先上步骤: 一. 生成签名文件(my-release-key.keystore文件) Android要求所有应用都有一个数字签名才会被允许安装在用户手机上 1.  在项目目录下运行如下命令: keyt ...

  6. KVC(forKey,forKeyPath)

    KVC是Cocoa一个大招,非常牛逼. 利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)  如:Person.m文件中: @implementation Person{    ...

  7. java代码实现网络远程开机

    http://my.oschina.net/kingfire/blog/156764 概述 远程开机(Wake onLAN)是指通过网络实现对服务器或者pc启动运行,现在很多网卡都支持的这个功能. 其 ...

  8. 购买阿里云的云服务器时选择镜像centos时应该选择哪个版本

    购买阿里云的云服务器时选择镜像centos时应该选择哪个版本 方法/步骤首先,我们要清楚的便是每个系统之间的差别,以及在阿里云上的差别:1. Windows1.1) 系统内含正版激活.1.2) 适合于 ...

  9. FZU 1977 Pandora adventure (DP)

    题意:给定一个图,X表示不能走,O表示必须要走,*表示可走可不走,问你多少种走的法,使得形成一个回路. 析: 代码如下: #pragma comment(linker, "/STACK:10 ...

  10. RSA加密解密总结

    简单的控制台程序 #include"stdafx.h" #include <math.h> #include<string.h> /*/求解密密钥d的函数( ...