sql >> データベース >  >> RDS >> PostgreSQL

JDBCによる更新を選択しますか?

    最初にfor updateを追加します 選択した列(および更新する他の列)に移動してから、それらを更新します。また、コメントに記載されているように、getConnectionを確認してください Connectionを返します 自動コミットなし。そして、Statementを設定する必要があります スクロール用のタイプとCONCUR_UPDATABLE 。のようなもの

    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. 決算在庫数量、価格、値をFIFOで計算

    2. MySQL:ストアド関数を使用して文字列内の単語を並べ替える方法は?

    3. MySQL-テーブルBに存在しないテーブルAの値のリストを取得するにはどうすればよいですか?

    4. Postgresqlに任意の長さの文字列を保存します