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 {