sql >> Database teknologi >  >> RDS >> PostgreSQL

vælge til opdatering med JDBC?

Du tilføjer først for update til dit valg (og dine andre kolonner, du vil opdatere), og derefter opdaterer du dem. Som nævnt i kommentarerne skal du også sørge for din getConnection returnerer en Connection uden autocommit. Og du skal indstille en Statement type til rulning og CONCUR_UPDATABLE . Noget som,

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ådan rettes com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Ingen handlinger tilladt efter forbindelsen er lukket. undtagelse?

  2. MySql- eller PHP-funktion til at konvertere længde- og breddegrad til decimalgrader

  3. Hvordan forhindrer man dbms_output.put_line i at trimme indledende mellemrum?

  4. SQL Server Operativsystem fejl 5:5 (Adgang nægtes.)