sql >> Databáze >  >> RDS >> Oracle

Příliš komplikované zpracování BLOB jdbc Oracle

Aktualizační přístup, který zmiňujete v prvním případě, lze přepsat pomocí čistého kódu JDBC a snížit tak vaši závislost na třídách specifických pro Oracle. To by mohlo být užitečné, pokud vaše aplikace potřebuje být databázová agnostika.

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();
  }
}

U MSSQL chápu, že syntaxe zamykání je odlišná:

String sql = 
  " SELECT " + blobColumn + 
  " FROM " + table + " WITH (rowlock, updlock) " + 
  " WHERE " + idColumn + " = ? "


  1. Jak získat nové uživatele za den v MySQL

  2. alter table upravit sloupec v databázi Oracle

  3. Chyba SQL Server JDBC v jazyce Java 8:Ovladač nemohl vytvořit zabezpečené připojení k serveru SQL pomocí šifrování Secure Sockets Layer (SSL)

  4. MMO hry a návrh databáze