你的位置:首页 > Java教程

[Java教程]java学习笔记—c3p0连接池与元数据分析(42)


第一步:导入c3p0包

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

<?"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.

              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.

<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();

    }

 






西藏旅游路线推荐西藏自驾游攻略西藏旅游线路大全什么时候去西藏旅游最好西藏跟团旅游报价多少世纪欢乐园门票_郑州世纪欢乐园门票多少钱 香格里拉在哪里_香格里拉在什么地方 三江自然湿地保护区在哪_地理位置 白水洋在哪里_白水洋在哪_白水洋在什么地方 劳动节坚守岗位 世园会“小蜜蜂”打动游客 稻城亚丁购物指南(图) 英国墓地分上下铺 水麻将你会打吗? 九鲤溪景区漂流开始了吗?九鲤溪漂流时间? 龙池曼漂流团购价格?嵩县龙池曼漂流门票团购优惠吗? 乐清到雁荡五虎山漂流有直达车吗?乐清到五虎山漂流怎么坐车? 富华水上皇宫需要带什么?潍坊富华游乐园水上皇宫要穿泳衣吗? 2015南京圣诞节去哪玩?_2015南京圣诞节好去处推荐 海南欢乐节举办几天?海南欢乐节几号到几号? 畅游武安古武当山 兔屎茶“解酒?各国闻所未闻的奇葩解酒法(全文) 40415 海南欢乐节去玩吗?第15届海南欢乐节优惠景点有哪些? 40416 海南欢乐节有什么好玩的?第十五届海南欢乐节节目介绍? 40417 “新世界7大奇观城市”出炉 黎巴嫩首都居首(全文) 40418 看奇幻魔界 听野人传说 40419 2015南京冰雪奇缘圣诞主题展举办时间、地点、门票以及活动详情怎么样? 40420 禁止使用硬币购物?世界八国最奇葩规定(全文) 40421 海南欢乐节有什么活动?2015海南欢乐节活动介绍? 4042 IPD60R380C6 Datasheet IPD60R380C6 Datasheet IPI60R380C6 Datasheet IPI60R380C6 Datasheet IPB60R380C6 Datasheet IPB60R380C6 Datasheet 宝安汽车站电话 宝安汽车站电话 宝安汽车站电话 罗浮山在哪里 罗浮山在哪里 罗浮山在哪里 情人节什么时候 情人节什么时候 情人节什么时候