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