第一步:导入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. 小学生轻松做题App

    作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具:墨刀 原型模型链接:https://modao.cc/ ...

  2. 在Eclipse中创建Maven版的Web工程

    步骤: 1.第一步 2.第二步 3.第三步 4.第四步 选中项目,右键在弹出的对话框中选择properties 5.第五步 6.第六步

  3. rundeck

    docker run -d -p 4440:4440 -e EXTERNAL_SERVER_URL=http://109.105.4.65:4440 -v/root/rundeck:/var/rund ...

  4. 牛X的FieldBlur

    [牛X的FieldBlur] Use Field Blur to build a gradient of blurs, by defining multiple blur points with di ...

  5. Matlab中插值函数汇总(下)

    Matlab中插值函数汇总分上下两个部分,主要整合自matlabsky论坛dynamic发表于2009-2-21 21:53:26 的主题帖,以及豆丁网rickoon上传的教材第8章<插值,拟合 ...

  6. Linux 下批量创建用户(shell 命令)

    第一种方法: 用shell批量创建用户,分为2中:1,批量创建的用户名无规律 :2.批量创建的用户名有规律首先,来说下批量创建的用户名无规律的shell:先把需要批量创建的用户名用一个文本文档列出来, ...

  7. Multithreading in C

    Multithreading in C, POSIX(可移植操作系统接口Portable Operating System Interface X ) style Multithreading - A ...

  8. oracle 建立表空间和用户

    .建立表空间, create tablespace "NETHRA" DATAFILE 'D:\DataBase\Oracle\iClass\iclass\iclass.DBF' ...

  9. ImageView.src的png图标变形问题

    图标,必须是png-24输出,如果是png-8输出,则失真.

  10. centos7下查看tomcat是否启动/系统日志等

    centos7下查看tomcat是否启动/系统日志等  方法一: 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown ...