通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

怎样用java向MySQL中的表插入1亿条数据

用java向MySQL中的表插入1亿条数据的方法:1、使用MySQL的存储过程;2、使用LOAD DATA INFILE;3、使用Java的JDBC调用addBatch()和executeBatch()方法。使用MySQL的存储过程是指使用预定义好的SQL语句集合,像函数一样进行调用。

一、用java向MySQL中的表插入1亿条数据的方法

1、使用MySQL的存储过程

MySQL中的存储过程是一组预定义好的SQL语句,可以像函数一样进行调用。使用存储过程可以将数据的插入操作从Java程序中移动到MySQL服务器上执行,从而提高了效率。

创建存储过程的SQL语句如下:

CREATE PROCEDURE insert_data(IN count INT)
BEGIN
    DECLARE i INT DEFAULT 0;
    WHILE i < count DO
        INSERT INTO table_name (column1, column2, …) VALUES (value1, value2, …);
        SET i = i + 1;
    END WHILE;
END

其中,count为插入的总记录数目,table_name为要插入数据的表名,column1、column2等为列名,value1、value2等为对应列的值。该存储过程使用while循环语句将数据插入到指定的表中。

调用存储过程的代码如下:

CallableStatement cstmt = conn.prepareCall("{call insert_data(?)}");
cstmt.setInt(1, 100000000);
cstmt.execute();

使用CallableStatement接口调用存储过程,并通过setInt方法设置参数count的值。最后,通过execute()方法执行存储过程插入数据。

2、使用LOAD DATA INFILE

LOAD DATA INFILE是MySQL中用于导入数据的命令。使用该命令可以将数据文件快速地导入到MySQL数据库中,比直接使用INSERT语句插入数据更有效率。

使用LOAD DATA INFILE的SQL语句如下:

LOAD DATA INFILE 'file_path' INTO TABLE table_name
FIELDS TERMINATED BY ',' (column1, column2, …);

其中,file_path为数据文件的路径,table_name为要插入数据的表名,column1、column2等为列名。该命令可以使用FIELDS TERMINATED BY指定字段分隔符。

在Java程序中,可以使用Statement接口的executeUpdate方法执行LOAD DATA INFILE命令,如下所示:

Statement stmt = conn.createStatement();
stmt.executeUpdate("LOAD DATA INFILE 'file_path' INTO TABLE table_name " +
    "FIELDS TERMINATED BY ',' (column1, column2, …)");

3、使用Java的JDBC调用addBatch()和executeBatch()方法

JDBC是Java Database Connectivity的缩写,它是Java程序和数据库之间的连接桥梁。使用JDBC可以通过Java程序直接访问数据库,并进行数据的增删改查等操作。

使用Java的JDBC,可以通过PreparedStatement接口的addBatch()方法批量插入数据,并使用executeBatch()方法将多个SQL语句一次性提交给数据库执行。

插入数据的代码如下:

String sql = "INSERT INTO table_name (column1, column2, …) VALUES (?, ?, …)";
PreparedStatement pstmt = conn.prepareStatement(sql);

for (int i = 0; i < 100000000; i++) {
    pstmt.setInt(1, value1);
    pstmt.setString(2, value2);
    …
    pstmt.addBatch();
    if (i % 1000 == 0) {
       pstmt.executeBatch();
    }
}

pstmt.executeBatch();

其中,sql为要执行的SQL语句,column1、column2等为列名,value1、value2等为对应列的值。使用PreparedStatement接口的setXXX()方法设置SQL语句的参数值。通过for循环批量添加数据,并在每1000条数据后调用executeBatch()方法提交一次数据。最后,通过执行pstmt.executeBatch()方法提交剩余的数据。

二、MySQL插入数据

MySQL 表中使用 INSERT INTO SQL语句来插入数据。你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。

1、语法

以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

如果数据是字符型,必须使用单引号或者双引号,如:”value”。

2、通过命令提示窗口插入数据

以下我们将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据

实例:

以下实例中我们将向 runoob_tbl 表插入三条数据:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 PHP", "教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 MySQL", "教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');
Query OK, 1 rows affected (0.00 sec)
mysql>

注意:使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号。

在以上实例中,我们并没有提供 runoob_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性。 所以,该字段会自动递增而不需要我们去设置。实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。

3、使用PHP脚本插入数据

你可以使用PHP 的 mysqli_query() 函数来执行 SQL INSERT INTO命令来插入数据。该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

语法:

mysqli_query(connection,query,resultmode);

实例:

以下实例中程序接收用户输入的三个字段数据,并插入数据表中:

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('连接失败: ' . mysqli_error($conn));
}
echo '连接成功<br />';
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$runoob_title = '学习 Python';
$runoob_author = 'RUNOOB.COM';
$submission_date = '2016-03-06';
 
$sql = "INSERT INTO runoob_tbl ".
        "(runoob_title,runoob_author, submission_date) ".
        "VALUES ".
        "('$runoob_title','$runoob_author','$submission_date')";
 
 
 
mysqli_select_db( $conn, 'RUNOOB' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
  die('无法插入数据: ' . mysqli_error($conn));
}
echo "数据插入成功\n";
mysqli_close($conn);
?>

对于含有中文的数据插入,需要添加 mysqli_query($conn , “set names utf8”); 语句。

延伸阅读1:Java语言简介

Java是Sun公司推出的能够跨越多平台的、可移植性较高的一种面向对象的编程语言,也是目前非常先进、特征最丰富、功能较早大的计算机语言。利用Java可以编写桌面应用程序、Web应用程序、分布式系统应用程序、嵌入式系统应用程序等,从而使其成为应用较广泛的开发语言。

相关文章