java对数据库性能测试

package com.mysql;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Date;

public class InsertTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        final String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";

        final String name = "com.mysql.jdbc.Driver";

        final String user = "root";

        final String password = "root";

        Connection conn = null;

        Class.forName(name);//指定连接类型

        conn = DriverManager.getConnection(url, user, password);//获取连接

        if (conn != null) {

            System.out.println("获取连接成功");

            insert(conn);

        } else {

            System.out.println("获取连接失败");

        }

    }

    public static void insert(Connection conn) {

        // 开始时间

        Long begin = new Date().getTime();

        // sql前缀

        String prefix = "INSERT INTO t_teacher (name, age) VALUES ";

        try {

            // 保存sql后缀

            StringBuffer suffix = new StringBuffer();

            // 设置事务为非自动提交

            conn.setAutoCommit(false);

            // 比起st,pst会更好些

            PreparedStatement pst = (PreparedStatement) conn.prepareStatement(" ");//准备执行语句

            // 外层循环,总提交事务次数

            for (int i = 1; i <= 100; i++) {

                suffix = new StringBuffer();

                // 第j次提交步长

                for (int j = 1; j <= 100000; j++) {

                    // 构建SQL后缀

                    suffix.append("('" + "cxx" + j + "'," + j + "),");

                }

                // 构建完整SQL

                String sql = prefix + suffix.substring(0, suffix.length() - 1);

                // 添加执行SQL

                pst.addBatch(sql);

                // 执行操作

                pst.executeBatch();

                // 提交事务

                conn.commit();

                // 清空上一次添加的数据

                suffix = new StringBuffer();

            }

            // 头等连接

            pst.close();

            conn.close();

        } catch (SQLException e) {

            e.printStackTrace();

        }

        // 结束时间

        Long end = new Date().getTime();

        // 耗时

        System.out.println("1000万条数据插入花费时间 : " + (end - begin) / 1000 + " s");

        System.out.println("插入完成");

    }

}

//数据库驱动jar包可以翻到jdk/jre/lib/tex下

//数据库插入数据的事件消耗大多在提交事务次数上,可以选择每10000次或10w次提交一次事务。

//如果提交事务被拒绝可以通过 show VARIABLES like '%max_allowed_packet%'; 观察数据库允许提交的package大小

//解决package大小:https://www.jb51.net/article/140790.htm

// 其执行sql大致原理为 insert into table (name,age) values ("zhang",12),("zhang",13)("zhang",14)("zhang",15)

你可能感兴趣的:(java对数据库性能测试)