…
public static void updateBlob( InputStream instream,
Connection conn,
String table,
String blobColumn,
String keyColumn,
String keyValue)
throws SQLException, IOException
{
Statement stmt = null;
OracleResultSet rs = null;
BLOB blob = null;
boolean oldAutoCommit = conn.getAutoCommit();
StringBuffer sqlBuffer = new StringBuffer();
try {
conn.setAutoCommit(false);
sqlBuffer.append(“select ”);
sqlBuffer.append(blobColumn);
sqlBuffer.append(“ from ”);
sqlBuffer.append(table);
sqlBuffer.append(“ where ”);
sqlBuffer.append(keyColumn);
sqlBuffer.append(“=‘”);
sqlBuffer.append(keyValue);
//注意这里的”for update”
sqlBuffer.append(“’ for update ”);
stmt = conn.createStatement();
rs = (OracleResultSet) stmt.executeQuery(sqlBuffer.toString());
if (!rs.next())
{
rs.close();
stmt.close();
throw new IllegalArgumentException(
“no record found for keyValue: ‘” + keyValue + “’”);
}
blob = rs.getBLOB(1);
OutputStream outstream = blob.getBinaryOutputStream();
int bufferSize = blob.getChunkSize();
byte[] buffer = new byte[bufferSize];
int bytesRead = -1;
while ((bytesRead = instream.read(buffer)) != -1)
{
outstream.write(buffer, 0, bytesRead);
}
instream.close();
outstream.close();
rs.close();
stmt.close();
}
catch (SQLException e)
{