1

我正在开发一个尝试通过 tsv infile 将数据插入 mysql 数据库的 java 项目。运行此程序时,它给了我以下错误:

线程“主”java.sql.SQLException 中的异常:com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket( MysqlIO.java:2985) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 在 com.mysql.jdbc.Connection.execSQL (Connection.java:3277) 在 com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402) 在 com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317) 在 LogProcessing.LogReader.addDay(LogReader. java:313) 在 LogProcessing.LogReader.updateTables(LogReader.java:177) 在 LogProcessing.LogReader.start(LogReader.java:59) 在 LogProcessing.LogReader.main(LogReader.java:45)

代码是

s.executeUpdate(query);

查询在哪里

LOAD DATA INFILE 'C:/temp/BA5770/tmp/temp.dat'INTO TABLE thisweek FIELDS TERMINATED BY '    ';

奇怪的是,当我复制这个查询并直接输入到mysql中时,它被接受了。

mysql> LOAD DATA INFILE 'C:/temp/BA5770/tmp/temp.dat' INTO TABLE thisweek FIELDS TERMINATED BY ' '; 查询正常,76932 行受影响,65535 条警告(2.44 秒)记录:76932 已删除:0 跳过:0 警告:76932

该表如下所示:

mysql> show columns from thisweek;
+------------+----------------------+------+-----+---------+-------+
| Field      | Type                 | Null | Key | Default | Extra |
+------------+----------------------+------+-----+---------+-------+
| functionID | smallint(5) unsigned | YES  | MUL | NULL    |       |
| serverID   | tinyint(3) unsigned  | YES  |     | NULL    |       |
| date       | date                 | YES  |     | NULL    |       |
| time       | time                 | YES  |     | NULL    |       |
| calls      | int(10) unsigned     | YES  |     | NULL    |       |
| meanTime   | float                | YES  |     | NULL    |       |
| WSC        | float                | YES  |     | NULL    |       |
| THM_DB2    | float                | YES  |     | NULL    |       |
| DEP        | float                | YES  |     | NULL    |       |
| Tandem     | float                | YES  |     | NULL    |       |
| LDAP       | float                | YES  |     | NULL    |       |
| PS         | float                | YES  |     | NULL    |       |
| IAV        | float                | YES  |     | NULL    |       |
| IMS        | float                | YES  |     | NULL    |       |
| Services   | float                | YES  |     | NULL    |       |
+------------+----------------------+------+-----+---------+-------+
15 rows in set (0.00 sec)

输入数据如下所示:

31  0   20111207    235900  19  0.0 -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0
32  0   20111207    235900  405 60.94   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
33  0   20111207    235900  1   32.0    24.0    14.0    0.0 0.0 0.0 0.0 8.0 0.0 24.0
34  0   20111207    235900  3   39.0    36.0    21.0    6.0 0.0 0.0 0.0 8.0 0.0 32.0
35  0   20111207    235900  27  9.44    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0    -1.0
4

1 回答 1

1

你怎么能说在 mysql 控制台上接受了查询?
查看执行状态语句:

Query OK, 76932 rows affected, 65535 warnings (2.44 sec)
Records: 76932 Deleted: 0 Skipped: 0 Warnings: 76932

对于76932记录,生成的警告是76932,这意味着每条记录都有一些可调整的错误。查询执行后在 mysql 控制台执行,
也许show warnings您 会看到大部分警告消息。 load data ...
... data truncated ...

使用MySQLfloatdouble遇到问题。
一种解决方法是:

  1. 在and上使用decimalorreal数据类型。floatdouble
  2. 在数据文件中使用正确的浮点精度。但这对于大型数据文件来说是乏味的。

在以下位置报告了错误和解决方法:

  1. 在浮点中,与 FLOAT 和 DOUBLE 有相同的问题。REAL 和 DECIMAL 工作正常。
  2. 我不知道 Float 和 Double 会发生什么,但我的镜头是 Float 制作的 ROUND ... DECIMAL 可以正常工作。
  3. FLOAT 和 DOUBLE 可能会因为它们循环程序而弄乱数据。
于 2012-06-26T16:32:19.220 回答