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