Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вы думали что знали о PreparedStatement все?Возможно, вы ошибались... / 12 сообщений из 12, страница 1 из 1
10.03.2018, 22:51
    #39612886
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
try (PreparedStatement ps = conn.prepareStatement("SELECT 1 FROM XX WITH(UPDLOCK) WHERE NUMBER=?")) {       
    for(int i =0; i < 5; i++) {
        ps.setString(1, String.valueOf(i));
        ps.execute();
        conn.commit();
        //A
    }
}                               


Внимание вопрос: сколько row локов будет в базе в точке А на n-итерации цикла при условии что записи с 1-5 есть в базе?
...
Рейтинг: 0 / 0
10.03.2018, 23:32
    #39612894
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
no56892, дружище. Здесь тема Java не прослеживается. Если ты решил блеснуть эрудицией
то попробуй это сделать в MS-SQL
...
Рейтинг: 0 / 0
11.03.2018, 00:16
    #39612900
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
mayton,
вот прямо таки прослеживается очень, там я уже успел блеснуть - http://www.sql.ru/forum/1286817/dedloki, проблема на клиенте, а именно в дажвовоских препаредстейтментах.
...
Рейтинг: 0 / 0
11.03.2018, 01:48
    #39612922
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
no56892проблема на клиенте, а именно в дажвовоских препаредстейтментах.
А что с ними не так?
...
Рейтинг: 0 / 0
11.03.2018, 01:55
    #39612925
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
maytonА что с ними не так?Например - поддержка в jdbc-драйвере.
Но более вероятно - корявое связывание: строковая переменная вместо числового (по смыслу) параметра.
...
Рейтинг: 0 / 0
11.03.2018, 02:07
    #39612928
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
Речь идет о mssql-jdbc ?
...
Рейтинг: 0 / 0
11.03.2018, 02:11
    #39612929
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
Автор нигде этого не уточнял, поэтому можно "построить несколько рабочих версий" (ц) "Гонки по вертикали" братьев Вайнеров.
...
Рейтинг: 0 / 0
11.03.2018, 15:12
    #39612986
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
no56892Внимание вопрос: сколько row локов будет в базе в точке А на n-итерации цикла при условии что записи с 1-5 есть в базе?

Ответ: а пофигу.

Вопрос не имеет отношения к Java.

авторвот прямо таки прослеживается очень, там я уже успел блеснуть - http://www.sql.ru/forum/1286817/dedloki, проблема на клиенте, а именно в дажвовоских препаредстейтментах.

Вам показалось. Посмотрев (с немалой скукой) ту тему, увидел, что ваша претензия в том, что транзакция создавалась неявно. Но это не имеет отношения к prepared statement .

Однако у JDBC драйверов всегда есть особенности, а для MS SQL Server есть несколько JDBC драйверов. Аоэтому всегда надо заглядывать в документацию по JDBC драйверу. Вот, делаю поиск в google по словам jdbc ms sql transaction и нахожу :
описание для одного драйвера

автор Драйвер JDBC поддерживает локальные транзакции с помощью различных методов SQLServerConnection класса, включая setAutoCommit, фиксациии отката. Локальные транзакции обычно явно управляются приложением или автоматически управляются сервером приложений Java Enterprise Edition (Java EE).


Здесь рекомендуется отключить autoCommit и вместо него использовать commit() и rolback(). Что он по умолчанию включён - обычное свойство JDBC драйверов. Не имеет отношения к prepared statement.

То есть, ваши претензии необоснованны.
...
Рейтинг: 0 / 0
11.03.2018, 17:34
    #39613031
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
no56892
Код: java
1.
2.
3.
4.
...
        conn.commit();
        //A
...


Внимание вопрос: сколько row локов будет в базе в точке А на n-итерации цикла при условии что записи с 1-5 есть в базе?
С учетом commit - ни одного
Т.к. блокироки в базе обычно держатся на время транзакции

Например - поддержка в jdbc-драйвере.
Но более вероятно - корявое связывание: строковая переменная вместо числового (по смыслу) параметра.
Какая связь между связыванием и блокировками?
Корявое связывание - может только на план сказаться (не будут использоваться индексы), но никак не на блокировки
...
Рейтинг: 0 / 0
11.03.2018, 19:19
    #39613049
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
Leonid KudryavtsevС учетом commit - ни одного
Тогда бы, наверное, и темы не было
...
Рейтинг: 0 / 0
12.03.2018, 11:06
    #39613267
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
Я уже подумал, что мир в очередной раз перевернулся с ног на голову. Но не....

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/hints-transact-sql-table

MSDNUPDLOCK
Указывает, что блокировки обновления применяются и удерживаются до завершения транзакции ....


https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/commit-transaction-transact-sql

MSDNCOMMIT TRANSACTION (Transact-SQL)
....
Отмечает успешное завершение явной или неявной транзакции .....

MSDN...
Если @@TRANCOUNT -1, инструкция COMMIT TRANSACTION делает все изменения данных выполняется с момента начала транзакции постоянной частью базы данных, освобождает ресурсы, удерживаемые транзакцией и уменьшает значение @@TRANCOUNT значение 0. Если @@TRANCOUNT больше 1, инструкция COMMIT TRANSACTION уменьшает @@TRANCOUNT только на 1 и транзакция остается активной ....


Т.ч. думаю не ошибусь предположить, что у кого-то кривые руки и в какой-то момент на сервер банально приходит лишний BEGIN TRANSACTION. Странно правда, что COMMIT даже в цикле не пробил ))), но я всегда призывал доверять "профессионализму коллег" ))).

Что один человек сделал, другой завсегда сломать сумеет ( С )

IMHO

P.S. MS SQL не знаю, не работал
...
Рейтинг: 0 / 0
12.03.2018, 11:13
    #39613272
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вы думали что знали о PreparedStatement все?Возможно, вы ошибались...
HettLeonid KudryavtsevС учетом commit - ни одного
Тогда бы, наверное, и темы не было
Вот прочитал исходную тему автора.... там у него и была проблема, что lock при SELECT'е слетал )))) соответственно INSERT у него давал dead lock'и )))

Т.ч. как раз, как я и сказал. Ни одного. И это правильно!

А подозревая, что у автора еще и auto commit стоял....
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вы думали что знали о PreparedStatement все?Возможно, вы ошибались... / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]