1. 程式人生 > >JDBC、c3p0連線池

JDBC、c3p0連線池

JDBC : JAVA DataBase Connectivity - java資料庫連線,是一套由java程式碼編寫的開發資料庫應用程式的標準。是用於Java應用程式連線各種資料庫的標準方法。 JDBC連線資料庫的步驟 1.載入驅動 語法:Class.forName(“classname”); 功能:獲取字串引數指定的類,並初始化該類。例如載入mysql的驅動語句是: Class.forName(“com.mysql.jdbc.Driver”); 2.建立連線 //2.1.資料庫的連線地址 String url=“jdbc:mysql://localhost:3306/student?characterEncoding=utf-8”;

//2.2.資料庫的使用者名稱 String userName=“root”; //2.3.資料庫密碼 String password=“336029”; //2.4建立連線 conn=DriverManager.getConnection(url, userName, password); 3. 建立執行物件 //sql語句 String id=“1”; String sql=“delete from stu where stuid=”+id; st=conn.createStatement(); 4.執行並返回執行結果 result=st.executeUpdate(sql); 5. 關閉連線 st.close(); //銷燬執行物件 conn.close(); //關閉連線通道

/**
 * 1.DriverManager:管理一組jdbc驅動服務,負責建立connection物件
 * 2.connection物件:連線物件,負責和資料庫進行連線,只有連線成功後才能對資料庫進行相應的操作,但是在連前,我需要知道資料庫的連線地址、使用者名稱和密碼
 * 3.Statement:執行物件,由connection進行建立,負責把SQL語句傳送給資料庫伺服器。 需要拼接SQL語句,不安全,容易引起SQL注入
 */
public class TestJdbc {
public static void main(String[] args) {
	//建立連線物件
	Connection conn=null;
	//定義一個執行物件
	Statement st=null;
	//建立一個變數接收資料庫伺服器返回的結果
	int result=0;
	try {
		//第一步:載入驅動
		Class.forName("com.mysql.jdbc.Driver");
		//第二步:建立連線
		//1.資料庫的連線地址
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		//2.資料庫的使用者名稱
		String userName="root";
		//3.資料庫密碼
		String password="336029";
		//建立連線
		conn=DriverManager.getConnection(url, userName, password);
		//System.out.println(conn);
		//第三步:建立執行物件
		//sql語句
		String id="1";
		String sql="delete from stu where stuid="+id;
		st=conn.createStatement();
		//第四步:執行並返回執行結果
		result=st.executeUpdate(sql);
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
	//第五步:關閉連線
		try {
			st.close();		//銷燬執行物件
			conn.close();	//關閉連線通道
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
	if(result>0) {
		System.out.println("刪除成功");
	}else {
		System.out.println("刪除失敗");
	}
}
}

預編譯執行物件

/**
* PreparedStatement:預編譯執行物件,它是Statement物件的子介面
 * 把sql語句預編譯並存儲到PreparedStatement物件中
 * 它允許該sql語句有佔位符,建立完成後對佔位符進行賦值,佔位符的座標從1開始
 */
public class DeleteStudent {

public static void main(String[] args) {
	//連線物件
	Connection conn=null;
	//建立連線物件
	PreparedStatement pst=null;
	//建立變數接受結果
	int result=0;
	
	//1.載入驅動
	try {
		Class.forName("com.mysql.jdbc.Driver");
		//2.建立連線
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		String userName="root";
		String password="336029";
		conn=DriverManager.getConnection(url, userName, password);
		//3.建立執行物件
		//sql
		String sql="delete from stu where stuid=?";
		//建立執行物件
		pst=conn.prepareStatement(sql);
		//賦值
		pst.setInt(1, 2);
		//4.執行並返回資訊
		result=pst.executeUpdate();
		//5.關閉連線		
	} catch (Exception e) {			
		e.printStackTrace();
	}finally {
		try {
			pst.close();//銷燬執行物件
			conn.close();
		} catch (Exception e2) {				
			e2.printStackTrace();
		}
	}
	if(result>0) {
		System.out.println("刪除成功");
	}else {
		System.out.println("刪除失敗");
	}
}
}

ResultSet:結果集物件

/*
 * ResultSet:結果集物件,查詢結果返回
 */
public class SelectStudent {

public static void main(String[] args) {
	select();
}
public static void select() {
	//連線物件
	Connection conn=null;
	//執行物件
	PreparedStatement pst=null;
	//定義結果集物件
	ResultSet rs=null;
	//定義一個集合去接收結果集中的值
	List<Student> list = new ArrayList<Student>();
	
	try {
		//第一步 載入驅動
		Class.forName("com.mysql.jdbc.Driver");
		//第二步 建立連線
		//1.資料庫的連線地址
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		//2.資料庫使用者名稱
		String user="root";
		//3.資料庫密碼
		String password="336029";
		//建立連線
		conn=DriverManager.getConnection(url, user, password);
		//第三步 建立執行物件
		//sql
		String sql="select * from stu";
		pst=conn.prepareStatement(sql);
		//第四步 執行並返回結果
		rs=pst.executeQuery();
		while(rs.next()) { //rs包含所有資料,next()表示向下走一行
			Student stu = new Student();
			stu.setStuid(rs.getInt("stuid"));
			stu.setStuname(rs.getString("stuname"));
			stu.setAge(rs.getInt("age"));
			stu.setAddress(rs.getString("address"));
			//向集合中新增資料
			list.add(stu);
		}
		//遍歷集合
		for(Student stu1:list) {
			System.out.println(stu1);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//第五步 關閉資源
		try {
			rs.close();
			pst.close();
			conn.close();
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
}

} 資料庫連線池: 資料庫連線池的優點:

  1. 資源重用
  2. 更快的系統反應速度
  3. 新的資源分配手段
  4. 統一的連線管理,避免資料庫連線洩露

c3p0的使用步驟 1.匯入c3p0的jar包 2.建立資料來源類(DataSource),負責初始化連線池,並提供資料庫連接獲取方法 3.定義ComboPooledDataSource變數 4.設定連線池引數(建議使用配置檔案設定引數) 5.獲取資料庫連線

c3p0的配置檔案資訊:

<?xml version="1.0" encoding="UTF-8"?>
<default-config>
	<!-- 基本配置 -->
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">123456</property>
	<!-- 每次增量,當需要建立Connection物件時,一次建立幾個 -->
	<property name="acquireIncrement">3</property>
	<!-- 當建立池物件後,池中應該有幾個Connection物件 -->
	<property name="initialPoolSize">10</property>
	<!-- 池中最少Connection個數,如果少於這個值,就會建立Connection -->
	<property name="minPoolSize">2</property>
	<!-- 池中最大連線個數 -->
	<property name="maxPoolSize">10</property>
</default-config>
<!-- 命名配置,new ComboPooledDataSource("mysql-config")時,使用的就是這個配置 -->
<named-config name="mysql-config">
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">123456</property>
	<property name="acquireIncrement">3</property>
	<property name="initialPoolSize">10</property>
	<property name="minPoolSize">2</property>
	<property name="maxPoolSize">10</property>
</named-config>