Для решения проблемы упомянуто here.Использование нескольких соединений db вызывает блокировку
Мы создаем и используем 2 одинаковых соединения JDBC Singleton (обычный, прокси).
- Но при этом мы сталкиваемся с тупиком, когда пытаемся использовать оба соединения последовательно в одной таблице для выполнения нескольких вставок и обновлений.
- Когда это произойдет, я не могу запускать какие-либо запросы из инструмента БД (Aqua Data Studio).
- Мое предположение заключается в том, что он бесконечно ждет другого соединения для блокировки замка.
Примечание: Мы не имеем дело с многопоточными здесь.
Выпуск:
// Auto Commit false
// Singelton
Connection connection = getConnection(); //same
// Auto Commit true
// // Singelton
Connection proxyConnection= getConnection(); //same
PreparedStatement ps = null;
try{
connection.setAutoCommit(false);
//Step 1
String sql = getQuery();
ps = proxyConnection.prepareStatement(sql);
ps.executeUpdate();
.
.
//Step 2
// if I don't execute this step everything works fine.
sql = getTransctionQuery();
ps = connection.prepareStatement(sql);
ps.executeUpdate();
.
.
//Step 3
sql = getQuery();
ps = proxyConnection.prepareStatement(sql);
ps.executeUpdate(); // this line never completes (if Step 2 runs)
}catch(){
connection.rollback(); //Doesn’t rollback step 1 and understandably step 2.
}
finally{
connection.close(); //cleanup code
proxyConnection.close();
}
Вопрос:
- Как решить эту проблему?
- Как убедиться, что разные соединения, хотя они создаются с использованием одного и того же загрузчика классов, не будут блокировать базу данных/таблицу.
Благодаря
Использование двух соединений - это ИМО, не очень хорошая идея. Поведение ожидается, если шаг 3 изменяет данные, заблокированные на шаге 2. Я думаю, вам нужно что-то вроде * автономной транзакции * в Oracle - посмотрите, [[это] (http://stackoverflow.com/questions/26866521/autonomous-transactions-in -sybase-ase-15-5). –
@up Я полностью согласен. Было бы полезно использовать два соединения, если потребуется получить данные из двух разных баз данных. – FilMiOs
@MarmiteBomber Я согласен, но потом, как решить проблему, упомянутую здесь http://stackoverflow.com/questions/35800951/jdbc-transaction-control-in-sybase – SRJ