1. 程式人生 > >封裝一個數據庫連線池工具類(connection與threadlocal與資料庫連線池和事務)

封裝一個數據庫連線池工具類(connection與threadlocal與資料庫連線池和事務)

package com.itheima.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtils {
    private static ComboPooledDataSource ds = new
ComboPooledDataSource(); private static ThreadLocal<Connection> tl = new ThreadLocal<>(); /** * 獲取資料來源 * * @return 連線池 */ public static DataSource getDataSource() { return ds; } /** * 從當前執行緒上獲取連線 * * @return 連線 * @throws
SQLException */
public static Connection getConnection() throws SQLException { Connection conn = tl.get(); if (conn == null) { //第一次獲取 建立一個連線和當前的執行緒繫結 conn = ds.getConnection(); //繫結 tl.set(conn); } return conn; } /** * 釋放資源 * * @param
conn 連線 * @param st 語句執行者 * @param rs 結果集 */
public static void closeResource(Connection conn, Statement st, ResultSet rs) { closeResource(st, rs); closeConn(conn); } public static void closeResource(Statement st, ResultSet rs) { closeResultSet(rs); closeStatement(st); } /** * 釋放連線 * * @param conn 連線 */ public static void closeConn(Connection conn) { if (conn != null) { try { conn.close(); //和當前執行緒解綁 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } /** * 釋放語句執行者 * * @param st 語句執行者 */ private static void closeStatement(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } st = null; } } /** * 釋放結果集 * * @param rs 結果集 */ private static void closeResultSet(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } /** * 開啟事務 * * @throws SQLException */ public static void startTransaction() throws SQLException { //獲取連線//開啟事務 getConnection().setAutoCommit(false); } /** * 事務提交 */ public static void commitAndClose() { try { //獲取連線 Connection conn = getConnection(); //提交事務 conn.commit(); //釋放資源 conn.close(); //解除繫結 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } /** * 事務回滾 */ public static void rollbackAndClose() { try { //獲取連線 Connection conn = getConnection(); //提交回滾 conn.rollback(); //釋放資源 conn.close(); //解除繫結 tl.remove(); } catch (SQLException e) { e.printStackTrace(); } } }

相關推薦

封裝個數連線工具(connectionthreadlocal資料庫連線事務)

package com.itheima.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.St

Java併發程式設計-擼個數連線

章節目錄 等待超時模式的使用場景 可以掌握的技能 等待/通知 消費者/生產者模式 CountDownLatch、AtomicInteger、靜態內部類、LinkedList、動態代理的使用 1.等待超時模式 場景 當我們呼叫方法時,這個方法返回的資源比較重要,比如獲取資料庫連線池

【php增刪改查實例】第四節 -自己 DIY 個數管理工具

user clas 記錄 split函數 增刪 err sset post 個數 本節介紹如何自己DIY一個數據庫管理工具,可以在頁面輸入sql 進行簡單的增刪改查操作。 首先,找到xampp的安裝目錄,打開htdocs: 新建一個php文件,名稱為 mysqladmin

給你個數連接獲取工具

package com.softeem.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.sql.C

oracle 資料備份 資料傳輸 個數複製到另外個數 工具

oracle 資料傳輸和資料備份中,假如想把一個oracle的資料庫備份到另外一個數據庫裡面,比如,想把資料庫A備份到本地資料庫B中, 用plsql工具是不行的 備份再還原的話,資料會備份不全,除了用oracle自帶的exp 和imp, 那麼,用什麼工具好呢 可以用工具:n

SqlServer將數中的表復制到另個數

步驟 .cn 一個 使用 目標表 插入 ctrl eat 根據 在使用SqlServer的過程中,我們可能需要將表從一個數據庫復制到另一個數據庫中,今天,我為大家介紹這種操作的具體方法及步驟。可能對大部分人來說是很簡單的東西,但是還是要記錄下來,好記性不如爛筆頭嘛。希望可以

Sql Server 導入還有個數中的表數

數據庫 tex .net mark manage alt img 資源管理 一個數據庫 在涉及到SQL Server編程或是管理時一定會用到數據的導入與導出, 導入導出的方法有多種,此處以SQL Server導入表數據為例。闡述一下:1、打開SQL Server Mana

基本原理# 3:個數中有什麽?

決定 完整 存在 相關 recipe 信息 插入 是什麽 window 數據庫基本原理# 3:一個數據庫中有什麽? 值得一提的是很多人將不需要去創建他們自己的數據庫。你可能從不會去創建你自己的表格或者是其他的一些數據結構。你可能是安裝應用系統為你創建數據庫,你也只是做一些備

SQLSERVER復制數某一個表到另個數中(可跨服務器)

led 數據 rom msdb pan 錯誤 ons 數據庫 ble 一、復制數據庫某一個表到另一個數據庫中(同一服務器) SELECT * INTO 表1 FROM 表2 --復制表2如果只復制結構而不復制內容或只復制某一列只要加WHERE條件就好了 例子:SELECT

怎麽設置登錄名 登陸後只能看到操作個數 這個用戶不能看到其他的數

base 應該 sql數據庫 body 兩個 blog 設置 庫服務器 OS 怎樣設置登錄名 登陸後只能看到和操作一個數據庫 這個用戶不能看到其他的數據庫一個服務器上有三個數據庫 我想新建三個登錄名 每個登錄名登陸後只能看到對應的一個數據庫 不能看到其余的兩個 怎樣進行設置

個數把數據傳到另外個數

一個 數據庫 aging gin mon int 服務器 一個數 ati 前提:在同一個服務器上,至少能訪問到。 insert into client_statistics.Installment(ymj_user_id,ymj_installment_id,refer,a

Confluence 6 SQL Server 創建個數和數用戶

macro 設置 自己 大小 read 和數 orm java 查詢 一旦你成功安裝了 SQL Server 服務器,請按照下面的方法為你的 Confluence 創建數據庫用戶和數據庫: 使用你的 SQL 管理員權限,創建一個新的數據庫(例如 confluence)

如何利用UDP協議封裝個數

  在如何封裝一個數據包上,是一個非常細緻的問題,而利用UDP協議來封裝的話,是比較簡單,讓我們一步步來分析典型的TCP/IP協議。一般來說一個典型的一個數據包,包括乙太網MAC頭+網路層IP資料頭+傳輸層UDP頭+要傳輸的資料。讓我們一層層來看看這些資料頭是如何構成的。    1、乙太網MAC頭   

SQL Server基礎() 工程上,我們用VS 新建個數,還是新增或讀取已有的資料庫呢(SSMS 可管理資料庫)?

一、VS 建立資料庫 1、轉 https://jingyan.baidu.com/album/9f63fb91893ac3c8410f0e58.html?picindex=2 2、VS建立資料庫後,新增表時,要點選"更新"按鈕。資料表才會成功建立。 轉https://blog.

mysql:將資料庫複製到另個數

操作步驟:     1.        雙擊開啟資料庫1     2.     &nb

藉助個數表來維護主鍵(mybatis呼叫儲存過程)

###建立主鍵表 CREATE TABLE c_table_key ( table_name varchar(50) NOT NULL COMMENT ‘需要建立主鍵的表名’, last_key bigint(20) NOT NULL COMMENT ‘最後一次使用的主鍵,新的主鍵將在此

SQL SERVER 將個數中的表資料複製到另個數

第一種情況:將A資料庫.dbo.A表的資料追加到B資料庫.dbo.B表中 (條件:此時B資料庫中已建立好了B表) insert into B資料庫.dbo.B表 select * from A資料庫.dbo.A表 [where條件] 此T-SQL語句會有異常   &n

MySQL查詢個數裡面有多少張表

6. MySQL查詢一個數據庫裡面有多少張表 XXX是你的資料庫名稱 SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'XXX' GROUP BY t

定時將資料庫A中的表同步到另個數

以下是核心配置 需要注意的是 這裡是一個表 一個表進行的同步,多張表時均需要在標籤中進行配置,另外目標資料庫中的表結構需要建好 需要更新的欄位都要再 和 中; 另外注意資料庫的地址和使用者名稱以及密碼都要改為自己使用的。 <?xml version

將表中的資料複製到另個數的表中

1. 在 src 目錄下建立 jdbc.properties #Oracle oracle.driver=oracle.jdbc.driver.OracleDriver oracle.jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl