JDBC transactions. Как это работает?

220
04 мая 2018, 13:36

Подскажите пожалуйста, должно ли это вообще работать? Я знаю что можно сделать поле уникальным в базе, но нужно чтобы работало так. Записывается в базу все сразу, вместо того чтобы записалась одна запись, а остальные не прошли. Игрался с уровнями изоляции, работает только на сериалайзбл, но при этом летят эксепшны и если мне нужно будет добавить допустим 2 и более записей, с разными значениями email - все равно полетят эксепшны и добавится только самая первая, так что serializeble не вариант.

public class Test {
public static void main(String[] args) throws InterruptedException {
    new Thread(new Thready("fuckthisshit")).start();
    new Thread(new Thready("fuckthisshit")).start();
    new Thread(new Thready("fuckthisshit")).start();
    new Thread(new Thready("fuckthisshit")).start();
}
static class Thready implements Runnable {
    private String name;
    public Thready(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        try {
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/fp_db", "root", "root");
            connection.setAutoCommit(false);
            connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE email =?");
            preparedStatement.setString(1, name);
            if (!preparedStatement.executeQuery().next()) {
                PreparedStatement preparedStatement1 = connection.prepareStatement("INSERT INTO users (email) VALUES (?)");
                preparedStatement1.setString(1, name);
                preparedStatement1.executeUpdate();
                preparedStatement1.close();
            }else {
                connection.rollback();
            }
            connection.commit();
            preparedStatement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

}

READ ALSO
JAVA two-dimensional array страны

JAVA two-dimensional array страны

Всем доброго времени сутокСтолкнулся с задачей по JAVA и не могу с ней разобраться

166
Совет по структуре БД

Совет по структуре БД

имеется набор полей: id, id_shop, id_product, current_price, old_price, time_update

256
could not initialize class com.mysql.jdbc.driver

could not initialize class com.mysql.jdbc.driver

Есть MySql, есть oracle sql developerКачаю jtds-1

227
Запрос в MySql. Совет

Запрос в MySql. Совет

Делаю такой запрос в бд (MySql):

249