executeUpdate 在大表上返回负值

Posted

技术标签:

【中文标题】executeUpdate 在大表上返回负值【英文标题】:executeUpdate returns negative value on large table 【发布时间】:2016-08-22 17:25:01 【问题描述】:

使用 readline 5.1 运行 mysql Ver 15.1 Distrib 5.5.44-MariaDB,适用于 Linux (x86_64)

我编写了一个 Java servlet,它在 SQL 导出语句上运行 executeUpdate() 并返回整数值。

    String sql = "SELECT TRIM(CONCAT( field1, CallDate, field2, Minutes, field3, field4 )) INTO OUTFILE '/var/www/html/pld/CDROUT/test2.txt' LINES TERMINATED BY '\n' FROM CDRLEC";
    Statement s = dbConPLD.createStatement();
    int rows = s.executeUpdate(sql);
    // Returns number of rows affected by this process
    return (rows == 0) ? 0 : rows;

    // Then, in the calling servlet, I have this        
    String returnOutput = Integer.toString(rows);
    return returnOutput;

这适用于只有几千行的小表。当我在一个有 40,000 行(确切地说是 40,895)的表上运行它时,我得到一个很大的负数:-24641。当我执行导入语句时,结果相同。该文件为 14MB。

当我从表中删除所有导入的记录时,结果也相同:“从 CDRLEC 中删除”。我处理了 -24641 行。

导出和导入已成功执行。只是我没有看到 40895,而是看到了 -24641 的行。谁能帮我弄清楚到底发生了什么?

【问题讨论】:

【参考方案1】:

我使用的是 JDBC 驱动程序:MariaDB 连接器/J 1.4.2

我通过切换到:JDBC Driver:MySQL-AB JDBC Driver mysql-connector-java-3.0.17-ga 解决了这个问题

代码现在按预期工作。

【讨论】:

以上是关于executeUpdate 在大表上返回负值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询在大表上很慢

在大表上使用 Django-Filter 以及 DataTables2

尽可能快地获取我的 MySQL 的第一行(也在大表上)

必须在大表上的 .Skip() 和 .Take() 之前在实体框架 4.1 中调用 .ToList()

经验分享为什么hive在大表上加条件后执行limit很慢

如何使用具有多个 GROUP BY、子查询和 WHERE IN 在大表上的查询来优化查询?