程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 使用連接池前後連接數據庫的對比,前後連接數據庫對比

使用連接池前後連接數據庫的對比,前後連接數據庫對比

編輯:MySQL綜合教程

使用連接池前後連接數據庫的對比,前後連接數據庫對比


首先,為什麼使用JDBC?

        JDBC是指java數據庫連接,是面向關系型數據庫的,它實際就是一個JAVA封裝的API,我們采用Java語言執行sql語句,對(各種)數據庫操作,具有跨平台性。不管是什麼關         系數據庫,我們都可以通過jdbc實現數據庫的連接和操作。

然後,為什麼使用連接池?

          我們不僅僅要求連接到數據庫,更需要連接的效率。這就需要連接池了。也就是說,我提前連接好n個連接,需要的時候,我在池裡取就行,不用再現創現用了,速度快了,效            率高了。連接池有c3p0,dbcp等,有文章專門介紹過幾種連接池的區別。結論就是c3p0是使用最廣泛的。

下面比較使用連接池前後的效率

1 建一個pool管理類 Mpool

package com.db;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;


public class Mpool {
private static Mpool mPool;
private ComboPooledDataSource dataSource;

static {
mPool = new Mpool();
}
//構造方法
public Mpool() {
try {
dataSource = new ComboPooledDataSource("mysql");
dataSource.setUser("root");
dataSource.setPassword("root123");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test02");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setInitialPoolSize(2);
dataSource.setMinPoolSize(1);
dataSource.setMaxPoolSize(10);
dataSource.setMaxStatements(50);
dataSource.setMaxIdleTime(60);
} catch (PropertyVetoException e) {
throw new RuntimeException(e);
}
}

public final static Mpool getInstance() {
return mPool;
}

public final Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("無法從數據源獲取連接 ", e);
}
}

}

2 測試類 main

import java.sql.*;
import com.db.Mpool;;

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("使用連接池.......................");
for (int i = 0; i < 20; i++) {
long beginTime = System.currentTimeMillis();

//1 獲取一個連接
Connection conn = Mpool.getInstance().getConnection();
try {

//2 這個連接要干嘛,封裝在PreparedStatement准備對象中.不可以采用拼接的形式了,采用占位符。
/* PreparedStatement pstmt = conn
.prepareStatement("insert into user(userName,password) value("+i+",111)");
*/
PreparedStatement pstmt = conn
.prepareStatement("insert into user(userName,password) values(?,?)");
pstmt.setInt(1, i);
pstmt.setInt(2, i);
//3 准備好以後,執行准備對象

/* 3-1執行查詢對象 ResultSet rs = pstmt.executeQuery();*/

//3-2 執行插入 更新等的准備對象
//Boolean a= pstmt.execute(); //如果第第一個結果是結果集 返回true。
//建議使用executeUpadate() 執行結果可以看到,0表示沒有執行
int a= pstmt.executeUpdate();
System.out.println(a);

/* 如果是查詢語句,則re存在返回結果。
while (rs.next()) {
re.get內容

}*/
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
System.out.println("第" + (i + 1) + "次執行花費時間為:"
+ (endTime - beginTime));
}

}

}

 

 

3 只是用jdbc測試

import java.sql.*;

public class Test1 {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("不使用連接池................................");
for (int i = 0; i < 20; i++) {
long beginTime = System.currentTimeMillis();
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e1) {
e1.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/test02";
String user = "root";
String password = "root123";
Connection conn=null;
try {
//直接使用jdbc獲取conn
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
PreparedStatement pstmt = conn
.prepareStatement("insert into user(userName,password) values(?,?)");
pstmt.setInt(1, i);
pstmt.setInt(2, i);

int a =pstmt.executeUpdate();
System.out.println(a);
/* while (rs.next()) {
// get content
}*/
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
long endTime = System.currentTimeMillis();
System.out.println("第" + (i + 1) + "次執行花費時間為:"
+ (endTime - beginTime));
}
}
}

 可以發現: 使用jdbc直接連接數據庫,每次連接需要的時間都差不多,40秒左右。而使用連接池的話,第一次連接需要的時間比較長,因為要做一些初始化操作吧,第二次獲取連接的時間大概是1秒,很快的。

另外注意,對數據庫的操作也是有影響的,比如查詢和寫入操作,時間就不一樣。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved