用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应用程序、分布式系统应用程序、嵌入式系统应用程序等,从而使其成为应用较广泛的开发语言。