选拔连接池前后连接数据库的相持统一

第三,为何使用JDBC?

使用连接池前后连接数据库的周旋统壹,前后连接数据库比较

先是,为何采用JDBC?

       
JDBC是指java数据库连接,是面向关系型数据库的,它实在就是三个JAVA封装的API,大家利用Java语言试行sql语句,对(各个)数据库操作,具备跨平台性。不管是如何关
        周密据库,大家都得以通过jdbc完毕数据库的连年和操作。

接下来,为何使用连接池?

         
我们不止必要连接到数据库,更必要连接的频率。那就须要连接池了。也正是说,小编提前连接好n个延续,需要的时候,小编在池里取就行,不用再次出现创现用了,速度快了,效
         
 率高了。连接池有c三p0,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();

//一 获取二个总是
Connection conn = Mpool.getInstance().getConnection();
try {

//二这么些一而再要干嘛,封装在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 希图好之后,奉行策画对象

/* 三-1推行查询对象 ResultSet rs = pstmt.executeQuery();*/

//三-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 + 一) + “次举行开销时间为:”

  • (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秒左右。而使用连接池的话,第叁回接二连三必要的年华比较长,因为要做一些发轫化操作吧,第一回拿走连接的年月大致是壹秒,非常的慢的。

其它注意,对数据库的操作也是有影响的,比如查询和写入操作,时间就不雷同。

 

首先,为啥使用JDBC?
JDBC是指java数据库连接,是面向关系型数据库的,它实际…

       
JDBC是指java数据库连接,是面向关系型数据库的,它其实就是二个JAVA封装的API,我们应用Java语言推行sql语句,对(种种)数据库操作,具备跨平台性。不管是如何关
        周全据库,我们都得以透过jdbc达成数据库的连日和操作。

接下来,为啥选拔连接池?

         
大家不唯有须要连接到数据库,更亟待接二连三的频率。那就要求连接池了。相当于说,小编提前连接好n个一而再,必要的时候,作者在池里取就行,不用重现创现用了,速度快了,效
         
 率高了。连接池有c三p0,dbcp等,有小说尤其介绍过两种连接池的区分。结论就是c三p0是行使最广大的。

下边相比较使用连接池前后的成效

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();

//一 获取多个三番五次
Connection conn = Mpool.getInstance().getConnection();
try {

//二这些一而再要干嘛,封装在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 盘算好之后,推行筹算对象

/* 三-一推行查询对象 ResultSet rs = pstmt.executeQuery();*/

//3-二 实践插入 更新等的筹算对象
//Boolean a= pstmt.execute(); //假设第第二个结果是结果集 再次回到true。
//提出使用executeUpadate() 施行结果能够看出,0象征一直不推行
int a= pstmt.executeUpdate();
System.out.println(a);

/* 假若是查询语句,则re存在重回结果。
while (rs.next()) {
re.get内容

}*必发365,/
} 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 + 一) + “次施行开支时间为:”

  • (endTime – beginTime));
    }
    }
    }

 能够开掘:
使用jdbc直接连接数据库,每便一连供给的大运都差不离,40秒左右。而选取连接池的话,第2回连续供给的年月相比长,因为要做一些开头化操作吧,第3回拿走连接的时辰大约是一秒,相当的慢的。

此外注意,对数据库的操作也是有影响的,举例查询和写入操作,时间就不一致。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website