• java学习笔记—c3p0连接池与元数据分析(42)


    第一步:导入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+" ");

                colNames.add(colName);

            }

            System.err.println();

            //获取数据

            while(rs.next()){

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

                   String val = rs.getString(nm);

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

                }

                System.err.println();

            }

           

           con.close();

        }

  • 相关阅读:
    9种纯CSS3人物信息卡片动态展示效果
    CSS3 animation属性 实现转动效果
    炫酷CSS3垂直时间轴特效
    css实现翻面效果
    uniapp上传图片转base64码
    经常使用的js三元表达式
    async/await 使用
    Python的OS模块批量修改文件名
    解决Tomcat对POST请求文件上传大小的限制
    HTTP 413错误解决方法
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4438355.html
Copyright © 2020-2023  润新知