Я пытаюсь реализовать блокировку строки базы данных в кластере MqSQL NDB, но не смог этого сделать.Я пытаюсь реализовать блокировку в методе transfer
.
- Как я могу реализовать блокировку строк кластера mysql?Я прочитал http://lists.mysql.com/cluster/5533 и не смог найти ни одного учебного пособия или справки о том, как это сделать.
- И как мне обеспечить, чтобы блокировки были согласованы для всех узлов данных?
.
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;
}