Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结算批准备报表_Java_Jdbc_Prepared Statement_Ojdbc_Ibm Jdk - Fatal编程技术网

Java 结算批准备报表

Java 结算批准备报表,java,jdbc,prepared-statement,ojdbc,ibm-jdk,Java,Jdbc,Prepared Statement,Ojdbc,Ibm Jdk,我有一个java应用程序,可以逐行读取文件并写入oracle db。 我们在批量插入过程中遇到了一个奇怪的错误,而在顺序插入过程中并没有出现这种错误。这个错误很奇怪,因为它只发生在AIX平台上的IBMJDK7上,每次我都会在不同的行上看到这个错误。我的代码如下所示: prpst = conn.prepareStatement(query); while ((line = bf.readLine()) != null) { numLine++; batchInsert(prpst, lin

我有一个java应用程序,可以逐行读取文件并写入oracle db。 我们在批量插入过程中遇到了一个奇怪的错误,而在顺序插入过程中并没有出现这种错误。这个错误很奇怪,因为它只发生在AIX平台上的IBMJDK7上,每次我都会在不同的行上看到这个错误。我的代码如下所示:

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)
我已经知道为什么会发生这种错误,但这不是我的情况。我几乎可以肯定,我没有将一些大数据设置为较小的列。可能我遇到了IBMJDK7中的一些错误,但无法证明这一点。 我的问题是,是否有一种方法可以避免这个问题?逐个插入不是一个选项,因为我们有大文件,而且需要花费太多时间。

尝试使用

prpst.setInt(5,新整数(1))

变量“numLine”的类型是什么? 您能否共享与PreparedStatement中设置的字段对应的列类型? 通过“onebyoneInsert”处理尝试一次。共享此案例的输出。这可能有助于确定根本原因。 还可以将“numLine”的值打印到控制台