Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите, как работает savepoint в jdbc ? / 10 сообщений из 10, страница 1 из 1
22.12.2020, 08:30
    #40030015
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
нужно примерно такое

есть цикл
в нем создать savepoint
далее обработка данных
если ошибка откат на этот savepoint

вопрос
на следующей итерации цикла что ?
создание того же savepoint сработает или упадет ?
если второе, как надо, создавать новый каждый раз или что
...
Рейтинг: 0 / 0
22.12.2020, 08:37
    #40030017
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
grok,
Это уже не java и трехзвенка. Это уже клиент сервер.
Когда вся бл в бд и длинные транзакции. По 8 часов или по сеансу.
Вам в ветку конкретной бд.
А java просто передаст команду серверу.
...
Рейтинг: 0 / 0
22.12.2020, 11:17
    #40030060
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
grok,

У вас же savepoint создаётся при обработке какой-то записи, в следующем цикле вы будете обрабатывать уже другую запись?
Всё зависит от того на какую "точку" вы хотите вернуться. Ну, и да, как уже верно замечено зависит от СУБД, может она вообще не умеет это.
...
Рейтинг: 0 / 0
22.12.2020, 12:15
    #40030084
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
Garrick
grok,

У вас же savepoint создаётся при обработке какой-то записи, в следующем цикле вы будете обрабатывать уже другую запись?
Всё зависит от того на какую "точку" вы хотите вернуться. Ну, и да, как уже верно замечено зависит от СУБД, может она вообще не умеет это.


БД оракл

в следующей итерации конечно другая запись
на PLSQL было бы так, и это работает

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
begin

for i in (
    select t.rowid as row_id, t.*
    from t
    where .....
)
loop
    savepoint s;

    begin
        update t
        set .......
        where t.rowid = i.row_id;
    exception
    when OTHERS then
        rollback to s;
    end;

end loop;

end;



а как на Java хз
мне к сожалению надо на Java по ряду причин
...
Рейтинг: 0 / 0
22.12.2020, 12:16
    #40030085
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
grok,
Запусти это анонимным блоком jdbc
...
Рейтинг: 0 / 0
22.12.2020, 12:27
    #40030088
grok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
PetroNotC Sharp
grok,
Запусти это анонимным блоком jdbc


к сожалению не выйдет, т.к. реальный код сильно сложнее
и в нем не только работа в БД
...
Рейтинг: 0 / 0
22.12.2020, 12:38
    #40030092
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
grok,
Конкретнее.
Можно и хранимку сделать
SetMyPoint
...
Рейтинг: 0 / 0
22.12.2020, 13:27
    #40030114
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
PetroNotC Sharp
Можно и хранимку сделать
прогресс...
...
Рейтинг: 0 / 0
22.12.2020, 14:30
    #40030154
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
grok,

Для работы с savepoint в JDBC есть методы:

https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#setSavepoint()
https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#setSavepoint(java.lang.String)
https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#releaseSavepoint(java.sql.Savepoint)
https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#rollback(java.sql.Savepoint)

Важно, что перед работой с ними необходимо отключить autocommit:
https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#setAutoCommit(boolean)

Конкретно в вашем случае скорее всего сработает примерно такой вариант:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
conn.setAutoCommit(false);
for (...) {
   Savepoint sp = conn.setSavepoint();
   try {
      .... processing logic
      conn.releaseSavepoint(sp);
   } catch (processing error) {
      conn.rollback(sp);
   }
}
conn.commit();
...
Рейтинг: 0 / 0
22.12.2020, 14:36
    #40030159
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите, как работает savepoint в jdbc ?
---- случайная копия ----
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите, как работает savepoint в jdbc ? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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