Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySql批量插入_Java_Mysql_Bulkinsert - Fatal编程技术网

Java MySql批量插入

Java MySql批量插入,java,mysql,bulkinsert,Java,Mysql,Bulkinsert,我想在MySql数据库中插入一些4K行。我不想触发4k“插入”查询。是否有任何方法可以只启动一个insert查询来存储数据库中的4k行 我在互联网上搜索,到处都发现用户正在从文件中批量插入数据库 在我的例子中,我的内存中有数据,我不想先将数据写入文件以进行大容量插入。如果我这样做,那么我将在程序中增加延迟。您可以编写一个查询,在对数据库的一次调用中进行多次插入: insert into your_table (field1, field2, field3) values (value1_1

我想在MySql数据库中插入一些4K行。我不想触发4k“插入”查询。是否有任何方法可以只启动一个insert查询来存储数据库中的4k行

我在互联网上搜索,到处都发现用户正在从文件中批量插入数据库

在我的例子中,我的内存中有数据,我不想先将数据写入文件以进行大容量插入。如果我这样做,那么我将在程序中增加延迟。

您可以编写一个查询,在对数据库的一次调用中进行多次插入:

insert into your_table (field1, field2, field3)
values 
  (value1_1, value1_2, value1_3), 
  (value2_1, value2_2, value2_3), 
  (value3_1, value3_2, value3_3)


在这里,根据我给出的示例,这个查询将在表中插入三行。

MySQL的
加载数据
命令可能对您有用:

参考Pascal的建议,除非您的命令超过
max\u allowed\u packet
,否则您应该能够执行此查询。在许多情况下,最好创建几个较小的插入,每个插入都有1000行


另外,
setAutoCommit(false)
,并调用
conn.commit()
executeBatch()
之后执行,以最大限度地减少提交次数。

在mySql中,可以使用加载数据填充

LOAD DATA INFILE 'C:\MyTextFile'
INTO TABLE myDatabase.MyTable
FIELDS TERMINATED BY ','
在数据库中1分钟内插入超过7000000条记录的大容量数据(带计算的超高速查询)
RRP和RRP_nl和RRP_bl不在csv中,但我们经过计算并在插入之后进行了计算。

我认为db对查询的长度施加了一些限制。在3行的情况下,它可以工作,但在4K行的情况下,我不认为它可以工作。当我尝试插入1000行(8 x int,2 x string)时,它对我有效。但当我尝试2000行时,我得到了一个“MySQL服务器已经消失”错误。为了解决这个问题,我将尝试像James C建议的那样一次插入1000行。@Pascal是原子的吗?如果数据库中途崩溃,是否可能只插入三行中的两行?@YatendraGoel:您仍然可以将单元素插入集划分为n-(4K/n)-元素插入。
    mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
    $affected = (int) (mysqli_affected_rows($cons))-1; 
    $log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');