`

JDBC mysql批量插入

阅读更多

使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢?

在JDBC编程接口中Statement 有两个方法特别值得注意:

1
void addBatch() throws SQLException

Adds a set of parameters to this PreparedStatement object's batch of commands.

1
int[] executeBatch() throws SQLException

Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts. The int elements of the array that is returned are ordered to correspond to the commands in the batch, which are ordered according to the order in which they were added to the batch.
通过使用addBatch()和executeBatch()这一对方法可以实现批量处理数据。
不过值得注意的是,首先需要在数据库链接中设置手动提交,connection.setAutoCommit(false),然后在执行Statement之后执行connection.commit()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cyl.demo.ipsearcher;
 
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
public class DbStoreHelper {
 
    private String insert_sql;
    private String charset;
    private boolean debug;
 
    private String connectStr;
    private String username;
    private String password;
 
    public DbStoreHelper() {
        connectStr = "jdbc:mysql://localhost:3306/db_ip";
        // connectStr += "?useServerPrepStmts=false&rewriteBatchedStatements=true";
        insert_sql = "INSERT INTO tb_ipinfos (iplong1,iplong2,ipstr1,ipstr2,ipdesc) VALUES (?,?,?,?,?)";
        charset = "gbk";
        debug = true;
        username = "root";
        password = "***";
    }
 
    public void storeToDb(String srcFile) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile), charset));
        try {
            doStore(bfr);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bfr.close();
        }
    }
 
    private void doStore(BufferedReader bfr) throws ClassNotFoundException, SQLException, IOException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(connectStr, username,password);
        conn.setAutoCommit(false); // 设置手动提交
        int count = 0;
        PreparedStatement psts = conn.prepareStatement(insert_sql);
        String line = null;
        while (null != (line = bfr.readLine())) {
            String[] infos = line.split(";");
            if (infos.length < 5)   continue;
            if (debug) {
                System.out.println(line);
            }
            psts.setLong(1, Long.valueOf(infos[0]));
            psts.setLong(2, Long.valueOf(infos[1]));
            psts.setString(3, infos[2]);
            psts.setString(4, infos[3]);
            psts.setString(5, infos[4]);
            psts.addBatch();          // 加入批量处理
            count++;           
        }
        psts.executeBatch(); // 执行批量处理
        conn.commit();  // 提交
        System.out.println("All down : " + count);
        conn.close();
    }
 
}
分享到:
评论

相关推荐

    Mybatis与JDBC批量插入MySQL数据库性能测试

    本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    JDBC批量插入 更新 删除等操作

    #### 一、JDBC批量插入 JDBC(Java Database Connectivity)是Java平台中用来标准地连接数据库的技术。通过JDBC,Java应用程序可以与多种类型的数据库进行交互,实现数据的读取、写入等功能。批量操作是指在一次...

    jdbc批量插入大字段

    因此,"jdbc批量插入大字段"这个话题旨在探讨如何高效地通过Java JDBC来实现Blob字段的批量插入,以提高性能。 首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的...

    JDBC连接MySQL数据库批量插入数据过程详解

    "JDBC连接MySQL数据库批量插入数据过程详解" 本文主要介绍了使用JDBC连接MySQL数据库批量插入数据的过程详解,通过示例代码详细介绍了批量插入数据的步骤,对大家的学习或者工作具有一定的参考学习价值。 一、JDBC...

    Mybatis 3+Mysql 实现批量插入

    本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### 一、MyBatis框架简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    Mysql JDBC驱动 .zip_MYSQL_jdbc mysql_mysql jdbc_mysql jdbc driver_

    MySQL JDBC驱动是Java开发者在与MySQL数据库交互时不可或缺的一个组件。JDBC(Java Database Connectivity)是Java编程语言的标准API,用于连接Java应用程序和各种类型的数据库,包括MySQL。MySQL JDBC驱动,也称为...

    jdbc连接mysql工具类

    此外,描述中提到的SQL文件通常包含创建表、插入数据、更新或删除数据等操作,这些操作可以通过读取文件内容并调用JDBC方法执行。例如,你可以使用`BufferedReader`读取SQL文件,然后逐行执行。 总之,`jdbc连接...

    java 下执行mysql 批量插入的几种方法及用时

    在Java中,执行MySQL批量插入数据有多种方法,每种方法在性能上都有所不同。以下是对这些方法的详细分析: 方法1:单条插入 这是最基础的插入方式,每次循环都创建一个新的SQL语句并执行。这种方法的效率最低,因为...

    利用poi获取excel数据批量插入大量数据到mysql

    本教程将详述如何使用Apache POI库读取Excel数据,并通过Java的JDBC接口批量插入到MySQL数据库中。Apache POI是Java平台上的一个开源项目,它允许程序员创建、修改和显示Microsoft Office格式的文件,其中包括Excel...

    JDBC_MYSQL.rar_JDBC-MYSQL_java jdbc mysql_java sql 简单

    在本示例中,我们关注的是使用JDBC与MySQL数据库的连接,这也是一个常见的应用场景,因为MySQL是一个广泛使用的开源关系型数据库管理系统。 1. **JDBC基础**: - JDBC是Java中的一个API,它提供了多种方法来建立...

    JDBC连接Mysql数据库案例

    本案例将探讨如何使用JDBC连接MySQL数据库,并通过实际的代码示例讲解整个过程。我们将涉及以下知识点: 1. **JDBC驱动注册**: 在Java中,连接MySQL数据库首先需要加载并注册JDBC驱动。MySQL的JDBC驱动类是`...

    MYSQL批量插入数据的实现代码第1/3页

    ### MySQL批量插入数据的技术解析与实践 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,在处理大量数据的场景下显得尤为重要。批量插入数据是提高数据处理效率的有效手段之一。本文将深入探讨...

    JDBC实现MYSQL数据库迁徙

    此外,为了提高效率,可以考虑使用批量插入,即一次提交多条插入语句,减少网络交互和数据库的开销。同时,确保在迁移过程中正确处理主键和外键约束,避免数据不一致。 在实际操作中,可能还会遇到如字符集转换、...

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

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

    Java使用JDBC向MySQL数据库批次插入10W条数据(测试效率)

    本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement对象的`addBatch()`和`executeBatch()`两个方法实现。在示例代码中,我们创建了一个`...

    MySQL jdbc连接器 jdbc.zip

    此外,对于大规模应用,还可以考虑使用JDBC的批处理功能来提高批量插入或更新的效率。 总之,MySQL JDBC连接器是Java开发者不可或缺的工具,它使得我们可以方便地在Java应用中集成MySQL数据库,实现各种复杂的...

    mysql的jdbc驱动5.1

    2. **性能优化**: 提供了更快的数据读写速度,支持批量插入和预编译的SQL语句,以提高查询效率。 3. **连接池支持**: 集成了流行的连接池管理库,如C3P0和Apache DBCP,便于管理和优化数据库连接资源。 4. **SSL连接...

    批量插入大量数据

    同时,要关注数据库类型,如MySQL、PostgreSQL、Oracle或MongoDB等,因为不同数据库对批量插入的支持和优化方法会有所不同。 总的来说,批量插入大量数据是数据库操作中的重要技巧,涉及到数据预处理、批大小选择、...

Global site tag (gtag.js) - Google Analytics