java學習筆記—c3p0串連池與中繼資料分析(42)

來源:互聯網
上載者:User

標籤:

第一步:匯入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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.