for (int j = 0; j < countPerBatch; j++) {
stmt.setInt(1, 0);
CLOB clob = new CLOB((OracleConnection) conn, PicManager.GetImageStr(picList.get(i + j)));
stmt.setClob(2, clob);
stmt.addBatch();
PicManager.setCurrentPicNo(i + j);
}
stmt.executeBatch();执行到stmt.executeBatch()报错,为何?
解释一下代码:
这是一个保存大量照片到数据库的文件,PicManager.GetImageStr(picList.get(i + j))这个方法是把照片文件用base64转码成byte数组,最后new clob()是用来构造一个oracle.sql.CLOB对象,为何会报错?具体错误信息如下:Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at oracle.jdbc.driver.DatumBinder.bind(OraclePreparedStatement.java:15933)
at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2911)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10643)
at picUtil.PicUpload.run(PicUpload.java:65)下面是我写的转码方法:
public static byte[] GetImageStr(File pic) {
FileInputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(pic);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data).getBytes();
}
是byte数组太大的问题吗?
stmt.setInt(1, 0);
CLOB clob = new CLOB((OracleConnection) conn, PicManager.GetImageStr(picList.get(i + j)));
stmt.setClob(2, clob);
stmt.addBatch();
PicManager.setCurrentPicNo(i + j);
}
stmt.executeBatch();执行到stmt.executeBatch()报错,为何?
解释一下代码:
这是一个保存大量照片到数据库的文件,PicManager.GetImageStr(picList.get(i + j))这个方法是把照片文件用base64转码成byte数组,最后new clob()是用来构造一个oracle.sql.CLOB对象,为何会报错?具体错误信息如下:Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at oracle.jdbc.driver.DatumBinder.bind(OraclePreparedStatement.java:15933)
at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2911)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10643)
at picUtil.PicUpload.run(PicUpload.java:65)下面是我写的转码方法:
public static byte[] GetImageStr(File pic) {
FileInputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(pic);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data).getBytes();
}
是byte数组太大的问题吗?
这个还不好找, 把发生异常的那行代码粘贴出来, debug一下试试
我大概知道原因了,我想可能是照片文件太大,一个clob字段存不下