Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 高效地更新多行_Java_Mysql - Fatal编程技术网

Java 高效地更新多行

Java 高效地更新多行,java,mysql,Java,Mysql,如何高效地更新多行 一句话 多语句 单个语句字符串是否会变得太大,SQL无法处理(10000多个条目/行) 我有一个要修改的变量,它是status: | id | status | 我的数据存储在列表(ArrayList)中。请参阅准备好的语句: 在循环外创建准备好的语句,然后在循环内使用更新的参数执行准备好的语句。在MySQL中使用该命令可能更有效。前提是您可以将输入结构化为CSV格式。适当地使用REPLACE和/或IGNORE关键字。这将比MySQL中1000条语句的速度快得多。如果您的状

如何高效地更新多行

  • 一句话
  • 多语句
  • 单个语句字符串是否会变得太大,SQL无法处理(10000多个条目/行)

    我有一个要修改的变量,它是
    status

    | id | status |
    

    我的数据存储在列表(ArrayList)中。

    请参阅准备好的语句:


    在循环外创建准备好的语句,然后在循环内使用更新的参数执行准备好的语句。

    在MySQL中使用该命令可能更有效。前提是您可以将输入结构化为CSV格式。适当地使用REPLACE和/或IGNORE关键字。这将比MySQL中1000条语句的速度快得多。

    如果您的状态是有限的值集,那么我将根据状态将列表分成子集,并更新每条语句的行集。即使特定STAU有10K行,您也可以在一次调用中更新多行(使用in运算符)。这将减少应用程序更新所需的往返时间。

    您也可以尝试这样的批量更新,尽管我不确定它们是否有效:

    update `id_status_table` `row`
    set `status` = (
        select case `row`.`id` when 1 then 'one'
                               when 2 then 'two'
                               else 'three or more' end
    );
    

    虽然10000行的查询字符串可能太大,但您可以对每1000行应用这样的查询。

    如果您想使用JDBC并使其高效,您应该明确检查批插入性能(也适用于更新)

    一般来说,您需要向连接字符串中添加
    rewriteBatchedStatements=true
    ,例如:

    Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/database_name?rewriteBatchedStatements=true","login", "password");
    

    这将允许驱动程序将准备好的语句重新写入更有效的表单。

    您可以更新更新背后的需求吗?是一天一次还是每次。该过程每小时完成一次,但更新量会有很大变化。目前最糟糕的情况是每次更新大约11000行。你能解释一下这个问题吗。基于条件的单语句更新状态可以做到这一点。@ejb_,问题是我看不出哪种方式最有效。在一个字符串中进行所有更新,或者在for循环中逐个进行更新。我不知道构建大型更新字符串是否存在任何风险/后果。更新表1 set status=where id=您能否解释如何链接值和条件,或者它基于用户\外部源的输入我的数据存储在ArrayList中,这会改变什么吗?必须说这是更好的方法。将数据写入文件(假设列表包含Id和状态),将数据加载到临时表中。在这个简单的更新之后,trickYou必须自己编写代码,将ArrayList中的数据写入磁盘上的临时csv文件,并发出引用该文件的加载数据查询。