sql >> Databasteknik >  >> RDS >> PostgreSQL

välja för uppdatering med JDBC?

Du lägger först till for update till ditt val (och dina andra kolumner du vill uppdatera), och sedan uppdaterar du dem. Se också till att din getConnection, som noterats i kommentarerna returnerar en Connection utan autocommit. Och du måste ställa in ett Statement typ för rullning och CONCUR_UPDATABLE . Något liknande,

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. Så här löser du Anrop till odefinierad funktion dbase_open()-fel i Windows

  2. Databaskorruption

  3. Hur man visar tidsintervall

  4. SQL Server saknas index