Блокировка строк базы данных кластера MySQL NDB в Java - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь реализовать блокировку строки базы данных в кластере MqSQL NDB, но не смог этого сделать.Я пытаюсь реализовать блокировку в методе transfer.

  1. Как я могу реализовать блокировку строк кластера mysql?Я прочитал http://lists.mysql.com/cluster/5533 и не смог найти ни одного учебного пособия или справки о том, как это сделать.
  2. И как мне обеспечить, чтобы блокировки были согласованы для всех узлов данных?

.

public double getBal(String userid) throws SQLException { 
    Statement stmt = db.createStatement();

    ResultSet rs = stmt.executeQuery("select balance from account where id='"+userid+"'");

    return balance;
}

Способ передачи

public boolean transfer(String useridFrom, String useridTo, double amount) throws SQLException {


    //perform validation
    //have to lock the table here.
    double fromBal = getBal(useridFrom);
    double newBal = fromBal - amount;

    // transfer fund
    Statement stmt = db.createStatement();
    try {
        s.execute("set autocommit=0");
        s.execute("START TRANSACTION");
        s.executeUpdate("UPDATE account SET balance=" + newBal + " WHERE id='" + useridFrom+ "' ");

        double toBal = getBalance(useridTo);
        double newBalTo = toBal + amount;
        s.executeUpdate("UPDATE accounts SET balance=" + newBalTo + " WHERE id='" + useridTo+ "' ");

        s.execute("commit");
    } catch (SQLException e) {

        s.execute("rollback");
    }
    return true;
}
...