1. 程式人生 > >使用連線池的方式連線資料庫:使用DBUtil連線MYSQL資料庫

使用連線池的方式連線資料庫:使用DBUtil連線MYSQL資料庫

==================== DBUtil.java: ====================
package blog.util;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
import blog.exception.DBException;
 
 
public class DBUtil {
     
    private static DataSource ds = null;
 
    /**
     * 從資料庫連線池獲得一個數據庫連線
     * @return 資料庫連線
     * @throws DBException
     */
    public static Connection getConnection() throws DBException {
         
        //用資料庫連線池的方式實現,JNDI
        try {
            if(ds == null){        
                Context context = new InitialContext();
                ds = (DataSource) context.lookup("java:comp/env/jdbc/pmdb");           
            }
             
            return ds.getConnection();
        } catch (NamingException e) {          
            throw new DBException("資料庫連線池查詢失敗", e);
        } catch (SQLException e) {         
            throw new DBException("獲取資料庫連線異常", e);
        }
       
    }
     
    public static PreparedStatement getPreparedStatement(Connection conn, String sql) throws DBException {
        PreparedStatement pstmt = null;
        try {
            if (conn != null) {
                pstmt = conn.prepareStatement(sql);
            }
        } catch (SQLException e) {
            throw new DBException("建立執行語句失敗", e);
        }
        return pstmt;
    }
 
    public static PreparedStatement getPreparedStatement(Connection conn, String sql, int autoGenereatedKeys) throws DBException {
        PreparedStatement pstmt = null;
        try {
            if (conn != null) {
                pstmt = conn.prepareStatement(sql, autoGenereatedKeys);
            }
        } catch (SQLException e) {
            throw new DBException("建立執行語句失敗", e);
        }
        return pstmt;
    }
 
    public static Statement getStatement(Connection conn) throws DBException {
        Statement stmt = null;
        try {
            if (conn != null) {
                stmt = conn.createStatement();
            }
        } catch (SQLException e) {
            throw new DBException("建立執行語句失敗", e);
        }
        return stmt;
    }
 
    public static ResultSet getResultSet(Statement stmt, String sql) throws DBException {
        ResultSet rs = null;
        try {
            if (stmt != null) {
                rs = stmt.executeQuery(sql);
            }
        } catch (SQLException e) {
            throw new DBException("獲得查詢結果集失敗:" + sql, e);
        }
        return rs;
    }
 
    public static void executeUpdate(Statement stmt, String sql) throws DBException {
        try {
            if (stmt != null) {
                stmt.executeUpdate(sql);
            }
        } catch (SQLException e) {
            throw new DBException("更新失敗:" + sql, e);
        }
    }
 
    /**
     * 歸還資料庫連線
     * @param conn 資料庫連線例項
     * @throws DBException
     */
    public static void close(Connection conn) throws DBException {
        try {
            if (conn != null) {
                conn.close(); //把資料庫連線歸還到資料庫連線池,並不是真正的斷開資料庫的連線
            }
        } catch (SQLException e) {
            throw new DBException("關閉資料庫連線異常", e);
        }
    }
 
    public static void close(Statement stmt) throws DBException {
        try {
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
        } catch (SQLException e) {
            throw new DBException("關閉資料庫語句異常", e);
        }
    }
 
    public static void close(ResultSet rs) throws DBException {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
        } catch (SQLException e) {
            throw new DBException("關閉資料庫結果集異常", e);
        }
    }
}
================= META-INF下的Context.xml: =================
<Context reloadable="true">
    <Resource name="jdbc/pmdb" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="root" password="1234"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/pmdb?useUnicode=true&characterEncoding=utf-8">
    </Resource>
</Context>

================= web.xml: =================
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 
 <resource-ref>
  <res-ref-name>jdbc/pmdb</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
 
</web-app> 


相關推薦

Flask學習【第3篇】藍圖、基於DBUtils實現資料庫連線、上下文管理等 基於DBUtils實現資料庫連線

基於DBUtils實現資料庫連線池 小知識: 1、子類繼承父類的三種方式 class Dog(Animal): #子類 派生類 def

資料庫預設連線數 遠遠 大於 資料庫連線的 連結數,為什麼還要使用資料庫連線

1. 資料庫的讀寫能力與計算機硬體相關, 所以連結太多,資料庫也不能一下子處理。連線數超過資料庫最大連線數,連結就會等待,超時就會報錯。 2. 建立連結很浪費資源。資料庫連線池保持現有連線後不會再建立連線池,而是複用這些連結。 3. 如果併發超過連線池連線數,則連結排隊等待,直到空出連結。 4.如果

騰訊雲系列三Centos7 安裝 mysql資料庫 遠端連線 字符集設定

關鍵字加紅:難看死了Oracle oracle Linux linux 資料庫 java Java mysql Mysql 測試 —— edit by 陳宇超 安裝環境:騰訊雲主機 centos7,1

java配置多資料來源多連線的工具類,這裡是mysql和mongoDB

public class DBManager { private static final String PREFIX="jdbc:apache:commons:dbcp:"; private static Log log =LogFactory.getLog(DBManager.clas

golang go-sql-drive mysql連線的實現 golang go-sql-drive mysql連線的實現

golang go-sql-drive mysql連線池的實現 golang內部自帶了連線池功能,剛開始接觸golang的時候不瞭解這個,還自己搞了一個 sql.Open的物件管理池,真的非常囧啊。 sql.Open函式實際上是返回

golang sql連線的實現解析 golang sql連線的實現解析

golang sql連線池的實現解析 golang的”database/sql”是操作資料庫時常用的包,這個包定義了一些sql操作的介面,具體的實現還需要不同資料庫的實現,mysql比較優秀的一個驅動是:github.com/go-sql-dri

druid連線 使用詳解,以java+mysql為例

druid資料來源連線池配置詳解,基於druid.jar。以java+mysq為例,配置是如下: 相關屬性: 配置 預設值 說明 name   配置這個屬性的意義在於,如

Navicat連線阿里雲(centos7.3)的MySQL資料庫遇到的問題及解決方法

注:本文涉及到的解決方案都是我遇到的問題的對應解決方案,不一定適用於每一個人,如果問題仍然存在,請繼續百度查詢其他解決方法 1.  首先是登入阿里雲MySQL的一些必要資訊(登入其他雲主機的mysql同理): 使用ssh的方式連線到linux,具體連線引數的填寫見下圖 注意:網上很多教程寫的連線方式中“主機名

Python-MongoDB連線搭建(二)Python連線MongoDB

作者:WenWu_Both 出處:http://blog.csdn.net/wenwu_both/article/ 版權:本文版權歸作者和CSDN部落格共有 轉載:歡迎轉載,但未經作者同意,必須保留此段宣告;必須在文章中給出原文連結;否則必究法律責任

Weblogic連線屬性(PinnedToThread )導致連線連線不斷增長

最近專案遇到棘手的問題,weblogic連線池不斷增長導致連線爆滿。 後來經過仔細查詢發現weblogic連線池設定勾選了PinnedToThread 屬性導致的,下面先看下官方對這個屬性的介紹吧: PinnedToThread 是一個能夠改善效能的選項,它啟用執行執行緒

Spring的JDBCTemplate的基本程式碼操作,這裡沒用c3p0連線,用的自帶連線

Spring的jdbcTemplate操作 1.Spring 框架一站式框架 針對 JavaEE 三層,每一層都有解決技術 在dao層,使用jdbcTemplate 2.Spring 對不同持久化技術的支援 Spring為各種支援的持久化技術,都提

使用druid連線的超時回收機制排查連線洩露問題

在工程中使用了druid連線池,執行一段時間後系統出現異常: Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nest

報錯處理Python操作Mysql資料庫插入中文錯誤

學習《python網路爬蟲從入門到實踐》中遇到以下錯誤: Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'course' at row 1 出現這個錯誤的原因是,資料庫的編碼格式為latin1 而我要將utf

詳解如何恢復MySQL資料庫下誤刪的資料

作者:馬哥Linux運維-Robin 血的教訓,事發經過就不詳述了。直接上操作步驟及恢復思路(友情提示:資料庫的任何操作都要提前做好備份),以下是Mysql資料後的恢復過程: 1. 找到binlog 恢復資料的前提是必須開啟Mysql的binlog日誌,如果binlog日誌沒開啟,請忽略此篇文件。b

SODBASE實時大資料基礎(一)實時同步Mysql資料庫到Kafka

在實際大資料工作中,常常有實時監測資料庫變化或實時同步資料到大資料儲存,解決大資料實時分析的需求。同時,增量同步資料庫資料相比全量查詢也減少了網路頻寬消耗。本文以Mysql的bin-log到Kafka為例,使用Canal Server,通過SODBASE引擎不用寫程式就可以

資料庫自己理解的“資料庫事務隔離級別”

引言:在網上搜了很多關於事務的文章,感覺單獨來看都很難看懂,所以綜合自己的理解寫一篇我自己能理解的關於關係型資料庫事務的文章。 一、事務特徵 我們都知道資料庫事務具備ACID特性: Atomic(原子性):一個事務要麼成功,要麼失敗 Consistency(

MySQL(二)快速理解MySQL資料庫索引

# 索引 基本概念:索引是在儲存引擎層實現的,而不是在伺服器層實現的,所以不同儲存引擎具有不同的索引型別和實現。 ## 資料結構 + Tree 指的是 Balance Tree,也就是平衡樹。平衡樹是一顆查詢樹,並且所有葉子節點位於同一層。 + B+ Tree 是基於 B Tree 和葉子節點順序訪問指標進行

Hibernate 環境 配置 對映資料庫 SQL server ,Mysql 資料庫 ,測試無誤

最近要消化的知識有點多,多以特地將筆記寫道 部落格中,方便檢視 需要到的hibernate jar 包 ,大家可以自行到官網下載 Hibernate 中 配置 Sqlserver 資料庫 <?xml version="1.0" encoding=

03-MySQL概述--資料庫的學習階段+資料庫基礎+關係型資料庫+關鍵字說明+SQL+MySQL資料庫+MySQL伺服器物件

一、資料庫的學習階段 1、基礎階段:MySQL資料庫的基本操作(增刪改查),以及一些高階操作(檢視、觸發器、函式、儲存過程等) 2、優化階段:如何提高資料庫效率,如索引、分表等 3、部署階段:如何搭建真實的環境系統,如伺服器叢集、負載均衡等 二、資料庫基礎 1、什麼

【轉載】通過資料庫引擎來加速MySQL資料庫

 如果你是個賽車手,並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是什麼感覺呢?MySQL資料庫為開發人員所做的就好像是按按鈕換引擎;它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。   MySQL的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可