使用jdbc向mysql批量添加几十万数据

package com.tt.mybatis.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Random;

public class InsertIntoDBData {

    private static String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        long starTime = System.currentTimeMillis();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,password);
            //String sql1 = "insert into course(c_id,name) values (?,?)";
            //String sql2 = "insert into students(id,name) values (?,?)";
            //s_id是students表id,只有7w个数据
            //c_id是course表id,只有100个数据
            String sql3 = "insert into sc(sc_id,s_id,c_id,score) values (?,?,?,?)";
            ps = conn.prepareStatement(sql3);
            Random rand = new Random();
            for (int i = 1; i <= 700000; i++ ) {
                ps.setInt(1,i);
                ps.setInt(2,rand.nextInt(70000));
                ps.setInt(3,rand.nextInt(100));
                ps.setInt(4,rand.nextInt(100));
                ps.addBatch();
            }
            ps.executeBatch();
            long endTime = System.currentTimeMillis();
            System.out.println("OK,用时:"+ (endTime - starTime) + "毫秒");

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (ps != null ) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (conn != null ) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}运行结果:竟然要44分钟

 

原文地址:https://www.cnblogs.com/ttyyou/p/12344208.html

时间: 2024-10-27 12:40:09

使用jdbc向mysql批量添加几十万数据的相关文章

MySQL 批量添加

自己封装的一个批量添加. $data 是一个二维数组.key对应是数据表的字段名: /** * 批量创建 * @param array $data * @return int $res 影响行 * @author Wen */ public function CreateMore( $data ){ // 处理数据获取 要添加数据的字段名 $sql_key = NULL; $data_key = array_keys( $data[0] ); foreach ( $data_key as $k_

多实例MySQL批量添加用户和密码并授权

OS:Cent OS 6.3 DB:5.5.14 如果一台服务器上有100个MySQL数据库实例,此时需要给不同端口的几个数据库添加用户名.密码并授权应用IP,一个个授权没问题,反正累的不是我,哇咔咔. 创建add_user.sh #/bin/bash#add user to mysql db passpwd="yoon" cat user.txt | while read userdo  port=`echo $user |awk '{print $1 }'`  username=`

JDBC连接MYSQL,批量执行SQL语句或在执行一个SQL语句之前执行一个SQL语句

conn = MysqlJdbcUtils.getConnection(); Statement ps=conn.createStatement(); ps.addBatch("truncate QB_ShowCount_Asite_copy"); ps.executeBatch(); String SrcSql = "select convert(unhex(hex(convert(Community using latin1))) using utf8) as Commu

Oracle 与 MySQL 批量添加

Oracle: <update id="createNew" statementType="STATEMENT" parameterType="java.util.Map"> begin ${sql} end; </update> 注意:必须有begin   end:不然会报 ORA-00933: SQL 命令未正确结束 ; bad SQL grammar []; nested exception is java.sql.

使用JDBC处理MySQL大文本和大数据

LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. MySQL数据库中没有专门的CLOB数据类型,而如果要存储大文本,MySQL采用的是TEXT类型.TEXT类型又有TINYTEXT.TEXT.MEDIUMTEXT和LONGTEXT之分.MySQL中的BLOB类型又可分为TINYBLOB.BLOB.MEDIUMBLOB和LONGBLOB. 使用JDB

mysql批量插入500条数据

表格结构如下 需求name和password字段,生成如下格式: 总共批量生成500个. 解决思路: 可以用mysql 存储过程 如果linux环境下可以用shell 我们先测试第一种,用存储过程. DELIMITER ;;      ##定义;;为结束符 CREATE PROCEDURE test_insert()    ##创建存储过程  test_insert()是名字 BEGIN  DECLARE y int DEFAULT 1 ;        ##定义y 为整数 默认起始值为1 WH

python mysql curros.executemany 批量添加

#添加的表结构字段分辨是(id,title,summary,visits,accountName,grabTime) #其中id,是int自增主键,在添加操作的时候,不需要对id进行操作 conn = mysql.connector.connect(user='root',password='',database='newsdb',host='127.0.0.1', port='3306')cursor = conn.cursor() #此处Sql语句必须指定添加的字段名称!!!!!sql =

使用JDBC在MySQL数据库中快速批量插入数据

使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch() throws SQLException Adds a set of parameters to this PreparedStatement object's batch of commands. int[] executeBatch() throws SQLException Submits

JAVA 使用原生jdbc批量添加,表被锁住问题

今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!! 去网上查了大半天的资料才发现问题,在connection  commit过后需要加上 connection.setAutoCommit(true); 下面是示例代码 log.info("插入语句" + sql); //获取结果集 connection = JdbcUtils.getConnection(database.getMys