1. 程式人生 > >JavaEE基礎(06):Servlet整合C3P0資料庫連線池

JavaEE基礎(06):Servlet整合C3P0資料庫連線池

本文原始碼:GitHub·點這裡 || GitEE·點這裡

一、C3P0連線池

1、C3P0簡介

C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。

2、核心依賴

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
</dependency>
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>${c3p0.version}</version>
</dependency>

3、配置檔案

配置檔案位置:放在resources目錄下,這樣C3P0元件會自動載入該配置。

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <!-- 核心引數配置 -->
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/servlet-jdbc</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="user">root</property>
        <property name="password">123</property>
        <!-- 池引數配置 -->
        <property name="acquireIncrement">3</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">2</property>
        <property name="maxPoolSize">10</property>
    </default-config>
</c3p0-config>

4、編寫工具類

該工具類用來獲取資料庫連線,和釋放相關連線。

public class C3P0Pool {
    private static DataSource dataSource = new ComboPooledDataSource();
    public static DataSource getDataSource() {
        return dataSource ;
    }
    /**
     * 獲取連線
     */
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
    /**
     * 釋放連線
     */
    public static void close(ResultSet resultSet, PreparedStatement pst, Connection connection) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pst != null) {
            try {
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

二、資料操作封裝

1、新增資料

public class UserJdbcInsert {
    public static void insertUser (UserInfo userInfo){
        try {
            Connection connection = C3P0Pool.getConnection();
            String sql = "INSERT INTO user_info (user_name,user_age) VALUES (?,?)" ;
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1,userInfo.getUserName());
            statement.setString(2,userInfo.getUserAge().toString());
            statement.execute() ;
            C3P0Pool.close(null, statement, connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void batchInsertUser (List<UserInfo> userInfoList){
        try {
            Connection connection = C3P0Pool.getConnection();
            String sql = "INSERT INTO user_info (user_name,user_age) VALUES (?,?)" ;
            PreparedStatement statement = connection.prepareStatement(sql);
            for (UserInfo userInfo:userInfoList){
                statement.setString(1,userInfo.getUserName());
                statement.setString(2,userInfo.getUserAge().toString());
                statement.addBatch();
            }
            statement.executeBatch() ;
            C3P0Pool.close(null, statement, connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、查詢資料

public class UserJdbcQuery {
    public static UserInfo queryUser (String userName){
        UserInfo userInfo = null ;
        try {
            Connection connection = C3P0Pool.getConnection();
            String sql = "SELECT * FROM user_info WHERE user_name=?" ;
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1,userName);
            ResultSet resultSet = statement.executeQuery() ;
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("user_name");
                int age = resultSet.getInt("user_age");
                System.out.println("ID:"+id+";name:"+name+";age:"+age);
                userInfo = new UserInfo(name,age) ;
            }
            C3P0Pool.close(resultSet, statement, connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return userInfo ;
    }
}

3、更新資料

public class UserJdbcUpdate {
    public static void updateUser (String name,Integer age,Integer id){
        try {
            Connection connection = C3P0Pool.getConnection();
            String sql = "UPDATE user_info SET user_name=?,user_age=? WHERE id=?" ;
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setString(1,name);
            statement.setInt(2,age);
            statement.setInt(3,id);
            statement.executeUpdate() ;
            C3P0Pool.close(null, statement, connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4、刪除資料

public class UserJdbcDelete {
    public static void deleteUser (Integer id){
        try {
            Connection connection = C3P0Pool.getConnection();
            String sql = "DELETE FROM user_info WHERE id=?" ;
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.setInt(1,id);
            statement.executeUpdate() ;
            C3P0Pool.close(null, statement, connection);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、Servlet介面

public class JdbcServletImpl extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String userName = request.getParameter("userName") ;
        UserInfo userInfo = UserJdbcQuery.queryUser(userName) ;
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("使用者資訊:"+userInfo);
    }
}

測試訪問:

http://localhost:6003/jdbcServletImpl?userName=LiSi

頁面列印:

使用者資訊:UserInfo{userName='LiSi', userAge=22}

四、原始碼地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

相關推薦

JavaEE基礎(06)Servlet整合C3P0資料庫連線

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、C3P0連線池 1、C3P0簡介 C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。 2、核心依賴 <dependency> <groupId>mysq

JDBC整合c3p0資料庫連線 解決Too many connections錯誤

前段時間,接手一個專案使用的是原始的jdbc作為資料庫的訪問,釋出到伺服器上在運行了一段時間之後總是會出現無法訪問的情況,登入到伺服器,檢視tomcat日誌發現總是報如下的錯誤。 Caused by: com.mysql.jdbc.exceptions.jdbc4.

JavaEE基礎(01)Servlet實現方式,生命週期執行過程

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、Servlet簡介 Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。使用Servlet,可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動態建立網頁。 二

JavaEE基礎(02)Servlet核心API用法詳解

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、核心API簡介 1、Servlet執行流程 Servlet是JavaWeb的三大元件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Se

spring jdbc --注c3p0資料庫連線或druid連線使用配置整理

是Maven配置檔案:pom.xml的程式碼內容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

javaWeb學習記錄c3p0資料庫連線;DBUtils工具

1. c3p0資料庫連線池 讓我想起了星球大戰裡的C-3PO,哈哈。 1.1 資料庫連線池的概念 用池來管理Connection,這可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來獲取Connecti

jsp,servlet 連線c3p0資料庫連線是出現的問題

九月 02, 2015 10:17:48 下午 com.mchange.v2.log.MLog <clinit> INFO: MLog clients using java 1.4+ standard logging. 九月 02, 2015 10:17:48

ThreadLocal解決事務執行緒安全問題(c3p0資料庫連線工具類)

ThreadLocal底層是Map集合,它的key是當前執行緒,value由自己設定,可以繫結Connection或其他物件等,保證本次同一執行緒使用同一Connection。 ThreadLocal類提供幾個方法: get/set/remove 以下是ThreadLocal搭配c3p

Mysql學習--07.c3p0資料庫連線

學習目標 C3p0資料庫連線池 一、c3p0資料庫連線池          1、概述: c3p0是一個開源的JDBC連線池、它實現了資料來源和JNDI(Java Naming and Directory Interface,Java命名和目錄介面)繫結、支援jdbc3

servlet+jsp+mysql+資料庫連線實現註冊登陸驗證碼功能

首先專案的結構及所用到的jar包如圖: 主要用到jdbc和jstl的jar包,大家可自行去相應網站下載 一、資料庫和資料表的建立 1.建庫語句: create database test; 2.建表語句: CREATE TABLE `t_users` (  

c3p0 資料庫連線配置 詳細總結

前言 關於 c3p0 一般有這麼兩種配置,一種是通過 set 方法進行配置,另一種是通過在同 src 目錄下的 c3p0-conflg.xml 檔案或者 c3p0.properties 檔案進行相關的配置。 一、c3p0 通過 set 方法進行配置 原始碼: priva

maven專案管理器,Junit測試單元以及C3P0資料庫連線的會用總結

最近剛好連續學習了maven專案管理器,Junit測試單元以及C3P0資料庫連線池的使用,現將學習工程中遇到的問題與注意點總結如下: 1.maven專案管理器 maven是一種很好用的專案管理器,在開發工具中建立一個maven專案,它會自動生成各種目錄,有專門存放java

c3p0資料庫連線死鎖解決

專案進行壓力測試的時候,執行大概1小時候,後臺丟擲以下異常: Java程式碼   Nov 9, 2012 1:41:59 AM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector 

c3p0資料庫連線如何正確的關閉資源(“too many connections”的解決辦法)

一.問題分析 關於c3p0資料庫連線池的資源的關閉是一個很重要的問題,但是資源的關閉不僅僅是隻呼叫close()方法,將連結放入池中那麼簡單,如果你不考慮資料來源DataSource的關閉,那麼你的Demo將在很少的資料庫互動之後報出“too many connection

Flask(4)wtforms元件 & 資料庫連線 DBUtils

wtforms 元件的作用:   --- 生成 HTML 標籤   --- form 表單驗證 示例程式碼: app.py from flask import Flask, render_template, request from wtforms import Form from wtform

c3p0資料庫連線死鎖問題和mysql重連,連線丟失

c3p0引數解釋 #最常用配置#initialPoolSize:連線池初始化時建立的連線數,default : 3,取值應在minPoolSize與maxPoolSize之間 c3p0.initialPoolSize=10#minPoolSize:連線池保持的最小連線數,d

spring+mybatis+c3p0資料庫連線或druid連線使用配置整理

系統性能優化的時候,或者說在進行程式碼開發的時候,多數人應該都知道一個很基本的原則,那就是保證功能正常良好的情況下,要儘量減少對資料庫的操作。  據我所知,原因大概有這樣兩個:  一個是,一般情況下系統伺服器和資料庫伺服器應該是不在同一硬體上,這時候對資料庫的連線

使用c3p0資料庫連線時出現com.mchange.v2.resourcepool.TimeoutException

有一個線上環境使用的是c3p0資料庫,為外部提供介面服務。最近訪問壓力增大後臺tomcat的日誌裡面頻繁出現 com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting t

Servlet的JDBC 資料庫連線

國慶的最後的時候,花了些時間整理下筆記等東東:(一些亂亂的東西) 純servlet的demo中使用的; JDBC 資料庫連線池:(程式碼測試不能用,不過思路應該是對的,後來改好的  程式碼不對 沒有

用Hibernate儲存物件出現c3p0資料庫連線死鎖問題的可能原因

我在執行以下程式碼時遇到了問題: Session session = getSession(); Transaction tx = session.beginTransaction(); try {