Я написал код с «фантомным чтением», и мой код должен печатать разные значения, если уровень изоляции не является сериализуемым, но у меня уровень изоляции «повторяемость чтения», и он работает как serializable. Он показывает мне одинаковые цифры, но должен второй раз показать большую цифру. Почему так? У меня база данных MySql. Вот мой пример:Зачем нужен уровень повторяемости чтения в java, чтобы спасти меня от «Phantom reads»?
public class PhantomReadLesson {
static String url = "jdbc:mysql://localhost:3306/Lessons";
static String username = "root";
static String password = "1";
public static void main(String[] args) throws SQLException, InterruptedException {
try(Connection conn = DriverManager.getConnection(url, username, password);
Statement statement = conn.createStatement()) {
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
ResultSet rs = statement.executeQuery("Select count(*) from Books");
while(rs.next()){
System.out.println(rs.getInt(1));
}
new OtherTransaction2().start();
Thread.currentThread().sleep(1000);
rs = statement.executeQuery("Select count(*) from Books");
while(rs.next()){
System.out.println(rs.getString(1));
}
}
}
static class OtherTransaction2 extends Thread {
@Override
public void run() {
try(Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement()) {
conn.setAutoCommit(false);
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
stmt.executeUpdate("insert into Books (name) VALUES ('new Row')");
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Я подражаю «фантомным чтениям» здесь. Если я использую уровни «repeatable_read» или «serializable», они показывают одинаковые номера, если используются уровни «read_commmited» или «read_uncomited», они будут показывать разные цифры. Но согласно java doc https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html только сериализуемое сохранение с «фантомных чтений». Итак, почему повторяемый уровень чтения сохраняется с «phanotom read»?
Scary Вомбат - Повторяется читает дело с повторяемым читает, serialisable дела с фантомом читает https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html –
см http://stackoverflow.com/a/11044968/2310289 –