首页 > 数据库 >jdbc-批量插入mssql数据库-原

jdbc-批量插入mssql数据库-原

时间:2023-10-07 10:14:57浏览次数:40  
标签:jdbc java int 数据库 throws SQLException import mssql

package com.swift.aaa;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class Test2 {
 
    //static int count = 0;
 
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        SqlServerBatchInsert(); //100w  20s
        //OracleBatchInsert();    //100w  2s  1000w 20s
        //MySqlBatchInsert();     //100W  130S-150S
    }
 
    /***
     * Sqlserver 100W  20s
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static void SqlServerBatchInsert() throws ClassNotFoundException, SQLException {
        // 起始时间
        long start = System.currentTimeMillis();
        // 连接
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection connection = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=DEMO",
                "sa", "1");
 
        connection.setAutoCommit(false);
        // 执行插入
        PreparedStatement cmd = connection.prepareStatement(
                "INSERT INTO CUSTOMERS(NAME,AGE,ADDRESS,SALARY) values(?,?,?,?)");
 
        int n = 0;
 
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss.SSS");
 
        // 注意,此处一次性插入一亿条会溢出,导致程序崩溃,因此最好每3000万到5000万条数据一次,3000万条约需要20分钟
        // 把运行文件与数据库放在同一环境下速度更快
        // int num=1;  100000001
        for (int num = 1; num <= 8000000; num++) {// 1000000万条数据
            cmd.setObject(1, num);
            cmd.setObject(2, num);
            cmd.setObject(3, num);
            cmd.setObject(4, num);
            cmd.addBatch();
            if (num % 100000 == 0) {
                cmd.executeBatch();
                System.out.println("已插入:" + num);
            }
        }
        cmd.executeBatch();
        connection.commit();
 
        cmd.close();
        connection.close();
 
        long end = System.currentTimeMillis();
        System.out.println("SqlServer插入100W数据耗时:" + (end - start) / 1000 + "秒");
    }
 
 
    /***
     * Oracle  100W 2s
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static void OracleBatchInsert() throws ClassNotFoundException, SQLException {
        // 起始时间
        long start = System.currentTimeMillis();
        // 连接
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521/regent",
                "regent", "regent2021");
 
        connection.setAutoCommit(false);
        // 执行插入
        PreparedStatement cmd = connection.prepareStatement(
                "INSERT INTO ceshi(id,name,age) values(?,?,?)");
 
        int n = 0;
 
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss.SSS");
 
        // 注意,此处一次性插入一亿条会溢出,导致程序崩溃,因此最好每3000万到5000万条数据一次,3000万条约需要20分钟
        // 把运行文件与数据库放在同一环境下速度更快
        // int num=1;  100000001                     10000000
        for (int num = 1; num <= 1000000; num++) {// 1000000万条数据
            cmd.setInt(1, num);
            cmd.setInt(2, 921681220);
            cmd.setInt(3, 921681220);
            cmd.addBatch();
            if (num % 100000 == 0) {
 
                cmd.executeBatch();
                System.out.println("已插入:" + num);
            }
        }
        cmd.executeBatch();
        connection.commit();
 
        cmd.close();
        connection.close();
 
        long end = System.currentTimeMillis();
        System.out.println("Oracle插入100W数据耗时:" + (end - start) / 1000 + "秒");
    }
 
 
    /***
     * mysql 100W 130s-150s
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static void MySqlBatchInsert() throws ClassNotFoundException, SQLException {
        // 起始时间
        long start = System.currentTimeMillis();
        // 连接
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true",
                "root", "root");
 
        connection.setAutoCommit(false);
        // 执行插入
        PreparedStatement cmd = connection.prepareStatement(
                "INSERT INTO ceshi(id,name,age) values(?,?,?)");
 
        int n = 0;
 
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss.SSS");
 
        // 注意,此处一次性插入一亿条会溢出,导致程序崩溃,因此最好每3000万到5000万条数据一次,3000万条约需要20分钟
        // 把运行文件与数据库放在同一环境下速度更快
        // int num=1;  100000001                     10000000
        for (int num = 1; num <= 1000000; num++) {// 1000000万条数据
            cmd.setInt(1, num);
            cmd.setInt(2, 921681220);
            cmd.setInt(3, 921681220);
            cmd.addBatch();
            if (num % 100000 == 0) {
                cmd.executeBatch();
                System.out.println("已插入:" + num);
            }
        }
        cmd.executeBatch();
        connection.commit();
 
        cmd.close();
        connection.close();
 
        long end = System.currentTimeMillis();
        System.out.println("Mysql插入100W数据耗时:" + (end - start) / 1000 + "秒");
    }
 
 
}

 

标签:jdbc,java,int,数据库,throws,SQLException,import,mssql
From: https://www.cnblogs.com/hua900822/p/17745628.html

相关文章

  • 数据泵(impdb)导入Oracle分片的数据库dump文件
    数据泵(impdb)导入Oracle数据库一.sqlplus登录目标数据库,创建导入的目录路径#该目录要在导入的数据库本机建立,如果是docker就在容器内部创建createdirectorydata_diras'/home/oracle/prd_imp/prd_dump';data_dir为路径名称,可自命名。路径是导出的dmp文件存放的路径必须......
  • Oracle数据库升级PostgreSQL 后的踩坑记录(二)之date类型处理
    踩坑二:date类型处理背景:因为业务需求,需要整个项目除了适配oracle和mysql后还需要适配PostgreSQL,在此背景下就出现了一系列的问题。接系列一databaseId映射成oracle之后问题又随之而来,由于从oracle数据库的date类型映射成postgreSQL的timestamp字段又出现了一些查询报错的问题,我......
  • 服务器没有开放3306端口 远程访问MySQL数据库方法
    一、前言​当装有MySQL的服务器为了防止数据库被黑,提高安全性,把3306端口禁止掉,禁止对外访问,我之前写过一篇是借助跳板机的SSH隧道来访问实现安全,这种情况依然需要开放3306端口和使用一个额外的跳板机,比较麻烦,后来,突发奇想,直接使用MySQL所在服务器来做SSH隧道,并且使用localho......
  • jdbc-批量插入百万数据-5秒
    packagecom.swift.aaa;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Statement;importorg.junit.Test;publicclassAPP1{publicstaticvoidmain(String......
  • 数据库表查看缺失的索引
    缺失索引就是帮你查找你的数据库缺少什么索引,告诉你那些字段需要加上索引,这样你就可以根据提示添加你数据库缺少的索引了 SELECTTOP10[TotalCost]=ROUND(avg_total_user_cost*avg_user_impact*(user_seeks+user_scans),0),avg_user_impact,TableName=st......
  • 关系型数据库和非关系型数据库的区别
    关系型数据库(RelationalDatabase)和非关系型数据库(NoSQLDatabase)是两种不同的数据库管理系统。关系型数据库是基于关系模型的数据库,使用表格(表)来组织和存储数据。数据在表中以行和列的形式进行存储,每个表都有一个唯一的键(主键)来标识每一行数据。关系型数据库使用结构化查询语言(S......
  • 一种对数据库友好的GUID的变种使用方法
    概述.NET生成的GUID唯一性很好,用之方便,但是,缺少像雪花算法那样的有序性。虽然分布式系统中做不到绝对的有序,但是,相对的有序对于目前数据库而言,索引效率等方面的提升还是有明显效果的(当然,我认为,这是数据库的问题,而非编程的问题,数据库应该处理好任何类型数据作为主键索引时的性能,......
  • MySQL数据库
    1.事物的四大特性和隔离级别原子性:不可分割的操作单元,要么全部成功,要么回滚。一致性:如果执行事物之前数据库是一致的,那么执行后还是一致的。隔离性:事物操作之间彼此独立和透明,互不影响。持久性:事物一旦提交,其结果就是永久的。未提交读:允许脏读,其他事物只要修改了数据,即使未提交,......
  • SQLServer数据库三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式介绍
    SQLServer数据库三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式介绍  1.Simple简单恢复模式,Simple模式的旧称叫”Checkpointwithtruncatelog“,其实这个名字更形象,在Simple模式下,SQLServer会在每次checkpoint或backup之后自动截断log,也就是丢弃所有的in......
  • openGauss学习笔记-91 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-M
    openGauss学习笔记-91openGauss数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT外部支持工具为了支持MOT,修改了以下外部openGauss工具。请确保使用的工具是最新版本。下面将介绍与MOT相关的用法。有关这些工具及其使用方法的完整说明,请参阅《工具与命令参考》。91......