中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c3po簡單了解

發布時間:2020-07-12 00:09:30 來源:網絡 閱讀:496 作者:韓立偉 欄目:數據庫
package com.hanchao.test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.DataSources;


/***********************
 * @author:han    
 * @version:1.0        
 * @created:2015-10-11    
 ***********************
 */
public class TestPool {
	
	public static void main(String[] args) {
		
/*		Scanner input = new Scanner(System.in);
		System.out.println("請輸入賬號:");
		String name = input.next();
		System.out.println("請輸入密碼:");
		String pwd = input.next();
		System.out.println("請輸入金額:");
		float money = input.nextFloat();*/
		
		final String DRIVER = "com.mysql.jdbc.Driver";
		//final String URL = "jdbc:mysql://127.0.0.1:3306/mydb";
		//final String URL = "jdbc:mysql://localhost:3306/mydb";
		final String URL = "jdbc:mysql:///mydb";
		final String NAME = "root";
		final String PASSWORD = "root";
		
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		
		try {
			//1.加載數據庫驅動
			Class.forName(DRIVER);
			//連接mysql數據庫
			DataSource unpooled = DataSources.unpooledDataSource(URL,NAME,PASSWORD);
			//構建一個連接池
			DataSource pooled = DataSources.pooledDataSource(unpooled);

			//2.獲取數據庫連接(first Time)
		    conn = pooled.getConnection();
			System.out.println("1 con Class Type is :" + conn.getClass().getName());
			//取得內部的實際數據庫連接
			Object o1 = getInner(conn);
			System.out.println("1 Inner con Class Type is :" + o1.getClass().getName());
			
			//3.獲取Statement對象
			stat = conn.createStatement();
			//4.執行SQL
			rs = stat.executeQuery(" select * from t_user where id = 13");
		    while (rs.next()) {
				System.out.println(" username:" + rs.getString("username"));
			}
		    
		    //5.關閉連接
		    rs.close();
		    stat.close();
		    conn.close();
		    
		    //6.等待連接返回池中
		    try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		    
		    //第二次獲取數據庫連接
		    conn = pooled.getConnection();
			System.out.println("2 con Class Type is :" + conn.getClass().getName());
			Object o2 = getInner(conn);
			System.out.println("2 Inner con Class Type is :" + o2.getClass().getName());
			
			//獲取Statement對象
			stat = conn.createStatement();
			
			//3.獲取Statement對象
			stat = conn.createStatement();
			//4.執行SQL
			rs = stat.executeQuery(" select * from t_user where id = 13");
		    while (rs.next()) {
				System.out.println(" username:" + rs.getString("username"));
			}
/*
			//3.獲取Statement對象
//			String sql = "delete from t_user where id = 13";
//			String sql = "insert into t_user(username,address) values('tom1','USA1')";
		    StringBuilder sql = new StringBuilder();
		    sql.append("INSERT INTO t_account(username,`password`,money,`enable`)  ");
		    sql.append("VALUES ");
		    sql.append("('"+name+"','"+pwd+"','"+money+"','1')");
		    
		    System.out.println("SQL:" + sql.toString());
			
			//執行SQL
//			int rows = stat.executeUpdate(sql);
			int rows = stat.executeUpdate(sql.toString());
			if (rows > 0) {
				System.out.println("execute OK!!");
			} else {
				System.out.println("execute error !!");
			}
			
		*/	
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private static Object getInner(Object conn) {
		Object object = null;
		Field f ;
		
		try {
			f = conn.getClass().getDeclaredField("inner");
			f.setAccessible(true);
			object = f.get(conn);
			f.setAccessible(false);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return object;
	}

}

結果:

c3po簡單了解

c3po簡單了解

首先,從數據庫連接池獲得一個連接。發現連接類型并不是mysql的數據庫連接,而是,com.mchange.v2.c3p0.impl.NewProxyConnection。通過類名,可以推測,從數據庫連接池中獲取的只是一個代理。

當我們關閉.NewProxyConnection連接時,并沒有真正關閉連接,而只是將數據庫連接放入連接池保存,使得數據庫連接在連接池中得到復用。而從連接池返回的NewProxyConnection對象,只是對真實數據庫連接的包裝。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天峻县| 绥阳县| 南宁市| 延川县| 乐安县| 武强县| 伊金霍洛旗| 屏南县| 开化县| 渭源县| 烟台市| 敖汉旗| 津市市| 扎兰屯市| 曲阳县| 赫章县| 桐城市| 民勤县| 信阳市| 察隅县| 泰宁县| 许昌市| 石屏县| 台安县| 汝州市| 合江县| 贵定县| 观塘区| 运城市| 云梦县| 怀集县| 喀什市| 康乐县| 永善县| 安宁市| 江津市| 嘉黎县| 进贤县| 漠河县| 宁强县| 象山县|