【发布时间】:2014-08-10 04:54:24
【问题描述】:
我有这段代码(实际上,这是它的简化版本,obv。)
private StreamAndStatement getStatement(File f, String fid, Long dex, String uid, int id)
{
FileInputStream fis = null;
PreparedStatement statement;
statement = connection.prepareStatement("INSERT INTO BLOBTABLE (FID, FDEX, SFILE, UID, ID) VALUES (?, ?, ?, ?, ?)");
statement.setString(1, fid);
statement.setLong(2, dex);
fis = new FileInputStream(file);
statement.setBinaryStream(3, fis, file.length());
statement.setString(4, uid);
statement.setInt(5, id);
return new StreamAndStatement(statement, fis);
}
private insertStuff()
{
File f = new File("/home/user/thisFileExists");
StreamAndStatement sAndStatement = getStatement(f, "XYZ", 18L, "ABC", 78);
sAndStatement.getStatement().execute();
sAndStatement.closeStream();
}
StreamAndStatement 与您想象的一样简单明了。
现在整个代码运行没有 Oracle 对我大喊大叫,但 blob 最终是空的......
我真的没有在两者之间的任何时候弄乱流,正如你所见,创建流的 getStatement 和语句的执行是在两行连续的,所以没有篡改......
【问题讨论】: