1. 程式人生 > >JDBC(4)----------資料庫連線池(dbcp連線)

JDBC(4)----------資料庫連線池(dbcp連線)

1、JDBC:是提供用來執行SQL語句的java API.步驟如下:載入驅動程式、與資料庫建立連線、傳送SQL語句、處理結果。

2、JTA:事務有提交和回滾兩個概念。提交:所有的操作步驟都被完整的執行後,稱為事務被提交。回滾:由於某一操作步驟執行失敗,導致所有步驟都沒有被提交,則事務必須回滾,即回到事務執行前的狀態。

程式碼如下:

package henu.utils;
import java.sql.*;
public class DbUtil {
	/**
	 * 宣告連線資料庫的資訊,例如資料庫URL、使用者名稱、密碼等
	 */
	
	private static String url = "jdbc:mysql://localhost:3306/user";
	private static String user = "root";
	private static String password = "123";
	
	/**
	 * 宣告相關物件
	 */
	private static Statement stmt = null;
	private static ResultSet rs = null;
	private static Connection conn = null;
	
	/**
	 * 建立資料庫連結
	 */
	
	public static synchronized Connection getConnect() {
		try {
			//載入驅動
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	
	/**
	 * 執行insert、update、delete語句
	 * 
	 * 返回int型別
	 */
	
	public static int executeUpdate(String sql) {
		int result = 0;
		
		try {
			stmt = getConnect().createStatement();
			result = stmt.executeUpdate(sql);
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return result;
	}
	/**
	 * 執行select語句
	 * 
	 * 返回查詢ResultSet的結果集
	 */
	public static ResultSet executeQuery(String sql) {
		
		try {
			stmt = getConnect().createStatement();
			rs = stmt.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 執行動態的Sql語句
	 * @param sql含有引數的動態Sql語句
	 * @result 返回PreparedStatement物件
	 */
	
	public static PreparedStatement executePrepareStatement(String sql) {
		PreparedStatement ps = null;
		try {
			ps = getConnect().prepareStatement(sql);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		return ps;
	}
	
	/**
	 * 事務回滾
	 */
	
	public static void rollback() {
		try {
			getConnect().rollback();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 關閉資料庫
	 */
	
	public static void close() {
		
			try {
				if(rs!=null)
					rs.close();
				if(stmt!=null)
					rs.close();
				if(conn!=null)
					conn.close();
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	
	/**
	 * 連線Sql Server 2008
	 * 需要下載sqljdbc.jar
	 * Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
	 * url = "jdbc:sqlserver://localhost:1433;DatabaseName = dbName"
	 * 
	 * 
	 * 連線Oracle資料庫
	 * 載入驅動程式
	 * DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
	 * url = "jdbc:oracle:oci8:@user"
	 *或者
	 *Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
	 *url = "jdbc:oracle:thin:@localhost:1512:user" 
	 */
	
}

3、資料庫連線池:在一個虛擬的池中預先建好一定數量的Connection物件等待客戶端的連線,當客戶端連線時則分配一個空閒的Connection物件給客戶端連線資料庫;當這個客戶端請求結束時則將Connection物件歸還給池中,用來等待下一個客戶端的訪問。獨立於Web伺服器的資料庫連線池:dbcp方式

需要commons-dbcp-xxx.jar和commons-pool-xxx.jar

package henu.util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/**
 * DBCP
 * @suqichang
 * 2017-10-20
 */
public class DbUtil {
	
	private static BasicDataSource dataSource = null;

	public static void init(){
		if (dataSource != null){
			try{
				dataSource.close();
			}catch(Exception e){
				e.printStackTrace();
			}
			dataSource = null;
		}
		
		try {
			Properties p = new Properties();
			//硬編碼方式
			p.setProperty("driverClassName", "com.mysql.jdbc.Driver");
			p.setProperty("url", "jdbc:mysql://localhost:3306/webdisk");
			p.setProperty("username", "root");
			p.setProperty("password", "123456");
			p.setProperty("maxActive", "30");
			p.setProperty("maxIdle", "10");
			//讀取配置檔案
			//p.load(DbUtil.class.getClass().getResourceAsStream("/db.properties"));
			dataSource = (BasicDataSource)BasicDataSourceFactory.createDataSource(p);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static DataSource getDataSource()
	{
		if(dataSource == null) {
			init();
		}
		return dataSource;
	}
	
	public static synchronized Connection getConnection() {
		Connection con = null;
		if(dataSource == null) {
			init();
		}
		if(dataSource!=null) {
			try {
				con = dataSource.getConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return con;
	}
}


相關推薦

Spring學習-24:Spring中的JDBC Template(JDBC模板):預設連線DBCP連線、C3P0的配置

上一講中,我們編寫的測試類如下所示: package com.js.demo1; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springfram

JDBC4----------資料庫連線dbcp連線

1、JDBC:是提供用來執行SQL語句的java API.步驟如下:載入驅動程式、與資料庫建立連線、傳送SQL語句、處理結果。2、JTA:事務有提交和回滾兩個概念。提交:所有的操作步驟都被完整的執行後,稱為事務被提交。回滾:由於某一操作步驟執行失敗,導致所有步驟都沒有被提交,

Java個人總結——JDBC資料庫連線

三種常見的資料庫連線池 一、DBCP連線池 DBCP(DataBase connection pool),[資料庫連線池]。是 apache 上的一個 java 連線池專案,也是 tomcat 使用的連線池元件。單獨使用dbcp需要2個包:commons-dbcp.

JDBC 資料庫連線DBCP、C3P0 詳解

前言   這段時間狀態有一點浮躁,希望自己靜下心來。還有特別多的東西還沒有學懂。需要學習的東西非常的多,加油! 一、JDBC複習   Java Data Base Connectivity,java資料庫連線,在需要儲存一些資料,或者拿到一些資料的時候,就需要往

JDBC資料庫連線DBCP、C3P0

前言   這段時間狀態有一點浮躁,希望自己靜下心來。還有特別多的東西還沒有學懂。需要學習的東西非常的多,加油! 一、JDBC複習   Java Data Base Connectivity,java資料庫連線,在需要儲存一些資料,或者拿到一些資料的時候,就需要往資料庫裡存取資料。那麼java如何連線資料

java jdbc深入理解connection與threadlocal與資料庫連線和事務實

1.jdbc連線資料庫,就這樣子Class.forName("com.mysql.jdbc.Driver"); java.sql.Connection conn = DriverManager.getConnection(jdbcUrl);2.通過傳入jdbc url用Drivermanager.getC

jsp資料庫二、使用連線與資料來源連線資料庫

一、介紹 1、資料來源,是當前Web應用開發中獲取資料庫連線的首選方法。使用資料來源這種技術,應用程式在啟動時只需建立少量的連線物件即可 2、連線池與定義了一些連線,當應用程式需要連線物件時就從連線池中取出一個,當連線物件使用完畢將其放回連線池,從而避免在每次請求連線時都要建立連線物件

Java——Web開發之開源的資料庫連線C3P0與DBCP的使用

緊接上一篇資料庫連線池的學習,點連線直達~   資料庫連線池的簡單理解與使用 資料庫連線池DBCP程式碼連線與配置檔案: 1.先匯入使用的jar檔案,分別是dbcp.jar與pool.jar檔案 2.分別使用兩種方式實現,使用配置檔案(dbcpconfig.

常用資料庫連線dbpc,c3p0,Druid

1. 引言 1.1 定義 資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。 資料庫連線池負責分配、管理和釋放資料庫連線,它允許應

配置資料庫連線資料來源--------java利用BasicDataSource

DataSource又稱為資料來源,該類的目的是為了防止使用資料庫時不必要操作帶來的資源浪費,使用資料庫時需要進行資料庫連線,才可以使用資料庫,使用資料庫後,又要斷開連結,用來釋放資源。連結資料庫和斷開資料庫連線浪費資源,而且在頻繁操作資料庫的時候,如果按照沒有資料來源的方式

IOC整合JDBC模板&連線17

整合Spring自帶連線池 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property

spark的JDBC連線Scala版

一個Scala版的連線池,並在使用Spark Streaming進行Word Count時,把每批資料都存到mySql中 import java.sql.{Connection, DriverManager} import java.util object J

springboot整合druid連線資料庫密碼加密

<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version

mysql筆記五——資料庫連線原理、構建和java動態代理的使用

資料庫連線池 1、什麼是資料庫連線池?       資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項

淺析資料庫連線

由於最近專案要用到資料庫連線池,所以今天簡單的聊聊~, 這個話題的引起是因為我在寫mysql資料庫部分時產生了一個疑問,一般後臺處理資料部分,服務端是建立一個connection連線到資料庫,然後所有的請求通過這一個connection來訪問資料庫,

使用資料庫連線C3P0管理資料來源出現的Too many connections問題

使用了Spring的HibernateDaoSupport管理資料DAO,如果在方法中使用了this.getSession()獲取session後,不在後面關閉session(session.close()),就會造成

Java 連線使用DBCP與C3P0

DBCP   需要下載common-dbcp.jar和common-pool.jar。   下載網址(下載xxx-bin.zip即可):     http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi     http://com

c3p0連線配置檔案方式

package Test02; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.junit.Test; /* 步驟: 1.導包(c3p0-0.9.1.2.jar)+(mysql

springboot 2.0 使用Hikari連線號稱java平臺最快的,替換druid

1.springboot 2.0 預設連線池就是Hikari了,所以引用parents後不用專門加依賴 2.貼我自己的配置(時間單位都是毫秒) # jdbc_config datasourc

spring boot 加入庫連線alibaba druid 資料及分頁外掛

前言 上一遍只是簡單的說明了怎麼加入Mybatis,但這遠遠還是不夠,我們還需要加入資料庫連池來幫助我們來管理資料庫連線。 ##1、加spring boot druid 依賴 <dependency> <groupId>com.alib