通过java代码 测试高并发访问服务器数据库,并获取执行时间
控制并发次数,每个并发里又有多个SQL语句任务,获取每次执行sql语句的执行时间(ns).
因能力有限,本想加入代码获取----------每次并发执行n次SQL语句后,并发总和的平均值,即:并发时间的平均值。 目前只能手动去加,希望会的留言补充。
本次需要导入的jar包为:
mysql-connector-java-5.1.8.jar
db2jcc.jar(个人用)
db2jcc_license_cu.jar(个人用)
package test2;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BF {
public static void main(String[] args) {
int count = 2;// 次数并发
CyclicBarrier cyclicBarrier = new CyclicBarrier(count);
ExecutorService executorService = Executors.newFixedThreadPool(count);
long now = System.nanoTime();
for (int i = 0; i < count; i++)
executorService.execute(new BF().new Task(cyclicBarrier));
executorService.shutdown();
while (!executorService.isTerminated()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
long end = System.nanoTime();
System.out.println(" 总时间差为(单位:毫秒)!——————————" + (double) (end - now) / 1000000 + "ms");
}
public class Task implements Runnable {
private CyclicBarrier cyclicBarrier;
public Task() {
}
public Task(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try {
// 等待所有任务准备就绪
// 连接数据库
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/crm";
String user = "root";
String password = "root";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
// System.out.println("数据库连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
cyclicBarrier.await();
// 测试内容
String str1 = "INSERT INTO sys_user(user_code,user_name,user_password,user_state) VALUES('m0001','小书','456','1')";
PreparedStatement localPreparedStatement = conn.prepareStatement(str1);
long now = System.nanoTime();
// ResultSet localResultSet = localPreparedStatement.executeQuery();
// boolean localResultSet = localPreparedStatement.execute();
// int localResultSet = localPreparedStatement.executeUpdate();
for (int i = 0; i < 3; i++) {
boolean localResultSet = localPreparedStatement.execute();
System.out.println(localResultSet);
}
long end = System.nanoTime();
System.out.println("SQL语句的开始时间" + now + "ns" + "\n" + "结束时间" + end + "ns");
System.out.println(" 时间差为(单位:秒)!——————————" + (double) (end - now) / 1000000000 + "s");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}