पहले मामले में आपके द्वारा उल्लिखित अद्यतन दृष्टिकोण को शुद्ध जेडीबीसी कोड का उपयोग करके फिर से लिखा जा सकता है और इस प्रकार ओरेकल-विशिष्ट कक्षाओं पर आपकी निर्भरता कम हो जाती है। यह मददगार हो सकता है अगर आपके ऐप को डेटाबेस अज्ञेयवादी होना चाहिए।
public static void updateBlobColumn(Connection con, String table, String blobColumn, byte[] inputBytes, String idColumn, Long id) throws SQLException {
PreparedStatement pStmt = null;
ResultSet rs = null;
try {
String sql =
" SELECT " + blobColumn +
" FROM " + table +
" WHERE " + idColumn + " = ? " +
" FOR UPDATE";
pStmt = con.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE);
pStmt.setLong(1, id);
rs = pStmt.executeQuery();
if (rs.next()) {
Blob blob = rs.getBlob(blobColumn);
blob.truncate(0);
blob.setBytes(1, inputBytes);
rs.updateBlob(blobColumn, blob);
rs.updateRow();
}
}
finally {
if(rs != null) rs.close();
if(pStmt != null) pStmt.close();
}
}
एमएसएसक्यूएल के लिए मैं समझता हूं कि लॉकिंग सिंटैक्स अलग है:
String sql =
" SELECT " + blobColumn +
" FROM " + table + " WITH (rowlock, updlock) " +
" WHERE " + idColumn + " = ? "