У меня есть приложение Java, которое читает файлы и записывает в oracle db по строкам. Мы столкнулись с странной ошибкой во время пакетной вставки, которая не возникает во время последовательной вставки. Ошибка странная, потому что это происходит только с IBM JDK7 на платформе AIX, и я получаю эту ошибку в разных строках каждый раз. Мой код выглядит следующим образом:clearing batch readystatements
prpst = conn.prepareStatement(query);
while ((line = bf.readLine()) != null) {
numLine++;
batchInsert(prpst, line);
//onebyoneInsert(prpst, line);
}
private static void batchInsert(PreparedStatement prpst, String line) throws IOException, SQLException {
prpst.setString(1, "1");
prpst.setInt(2, numLine);
prpst.setString(3, line);
prpst.setString(4, "1");
prpst.setInt(5, 1);
prpst.addBatch();
if (++batchedLines == 200) {
prpst.executeBatch();
batchedLines = 0;
prpst.clearBatch();
}
}
private static void onebyoneInsert(PreparedStatement prpst, String line) throws Exception{
int batchedLines = 0;
prpst.setString(1, "1");
prpst.setInt(2, numLine);
prpst.setString(3, line);
prpst.setString(4, "1");
prpst.setInt(5, 1);
prpst.executeUpdate();
}
Я получаю эту ошибку в режиме вставки пакетного:
java.sql.BatchUpdateException: ORA-01461: can bind a LONG value only for insert into a LONG column
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10345)
Я уже знаю, почему эта ошибка Ora происходит, но это не мой случай. Я почти уверен, что я не устанавливаю некоторые большие данные в меньшую колонку. Возможно, я нахожусь в некоторых ошибках в IBM jdk7, но не могу этого доказать. Мой вопрос, если есть способ, которым я могу избежать этой проблемы? Вставка один за другим не является вариантом, потому что у нас большие файлы, и это занимает слишком много времени.