PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

wybrać do aktualizacji za pomocą JDBC?

Najpierw dodajesz for update do wybranych (i innych kolumn, które chcesz zaktualizować), a następnie je zaktualizuj. Ponadto, jak wspomniano w komentarzach, upewnij się, że Twój getConnection zwraca Connection bez automatycznego zatwierdzania. I musisz ustawić Statement wpisz do przewijania i CONCUR_UPDATABLE . Coś jak,

String[] colNames = { "email", "already_linked", "account_link_timestamp" };
String query = "select " + Stream.of(colNames).collect(Collectors.joining(", "))
        + "from email_accounts where already_linked = false for update";
try (Connection conn = getConnection(); // Make sure conn.setAutoCommit(false);
        Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                ResultSet.CONCUR_UPDATABLE);
        ResultSet rs = stmt.executeQuery(query)) {
    while (rs.next()) {
        // Get the current values, if you need them.
        String email = rs.getString(colNames[0]);
        boolean linked = rs.getBoolean(colNames[1]);
        Timestamp time = rs.getTimestamp(colNames[2]);
        // ...
        rs.updateBoolean(colNames[1], true);
        rs.updateTimestamp(colNames[2], //
                new Timestamp(System.currentTimeMillis()));
        rs.updateRow();
    }
} catch (SQLException e) {
    e.printStackTrace();
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekroczono limit czasu połączenia opakowania danych obcych Cloud SQL (postgres) z instancją repliki

  2. Postgres gdzie klauzula porównuje znacznik czasu

  3. jaki jest dobry sposób na poziomy shard w postgresql

  4. Uzyskaj czas wykonania zapytania PostgreSQL

  5. Spring Managed Bean Injection w klasie implementującej RowMapper