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 在大表上返回负值的主要内容,如果未能解决你的问题,请参考以下文章