Заявление. executeUpdate дает усеченную дату для столбца X в строке 1 ошибки

Я работаю над проектом Java, который пытается вставить данные в базу данных MySQL через tsv infile. При запуске этой программы выдает следующую ошибку:

Исключение в потоке "main" java.sql.SQLException: данные, усеченные для столбца "Службы" в строке 1 в 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.Con (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> ЗАГРУЗИТЬ ДАННЫЙ ИНФИЛЬ 'C:/temp/BA5770/tmp/temp.dat'INTO TABLE thisweek ПОЛЯ, ПРЕКРАЩАЕМЫЕ' '; Запрос в порядке, затронуты 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

1 ответ

Как вы можете сказать, что запрос принят на консоли MySQL?
Посмотрите на статус выполнения операторов:

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

За 76932 записи, предупреждения генерируются 76932 Это означает, что каждая запись имеет некоторую настраиваемую ошибку.
казнить show warnings на консоли MySQL после load data ... выполнение запроса и
возможно, вы увидите в основном ... data truncated ... предупреждающие сообщения.

Работать с float а также double есть проблемы в MySQL.
Обходной путь должен:

  1. использование decimal или же real типы данных более float а также double,
  2. используйте правильную плавающую точность в файлах данных. Но это утомительно для больших файлов данных.

Есть сообщения об ошибках и обходные пути на:

  1. В плавающей точке есть та же проблема с FLOAT и DOUBLE. REAL и DECIMAL работают нормально.
  2. Я не знаю, что происходит с Float и Double, но мой выстрел - это ROUND, сделанный Float... С DECIMAL будет работать нормально.
  3. FLOAT и DOUBLE путаются с данными, вероятно, в обход процедур.
Другие вопросы по тегам