Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jdbc транзакция, создание транзакции 
V
    Опции темы
lBugl
Дата 15.7.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 18.8.2009

Репутация: нет
Всего: 2



допустим есть код:

Код

db = new DB();

db.clearTable();
for(int i = 0; i < 5; i++){
  db.insertIntoTable(data);
}

как здесь сделать транзакцию?
PM MAIL   Вверх
Skipy
Дата 15.7.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 6
Всего: 16



db.beginTransaction()/db.commitTransaction()


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
ivanovpv
Дата 15.7.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 4
Всего: 28



В более традиционном варианте (не все драйверы JDBC поддерживают beginTransaction):
Код

Connection con;
...
con.setAutoCommit(false); //фактически переходим на транзакции
//неявное начало 1-й транзакции
db = new DB();
db.clearTable();
con.commit(); //первая транзакция после очистки базы

//неявно здесь начинается 2-я транзакция
for(int i = 0; i < 5; i++)
{
    db.insertIntoTable(data);
}
con.commit(); //закрытие 2-й транзакции после вставки


Вообще определение границ транзакции целиком и полностью возлагается на разработчика исходя из логики приложения.


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
lBugl
Дата 15.7.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 18.8.2009

Репутация: нет
Всего: 2



хм... немного поясню и скажу к чему пришёл:

db -- это мой класс, корорый осуществляет работу с БД. В нём есть процедура подключения к БД и отсоединения, а так же куча функций которые формируют запросы к БД и и возвращают значения.

т.е. объект db я использую в других классах и такм Connection нет.
засим я так понял надо добавить 3 метода в db:
Код


public void setCommit(boolean f){
  connection.setAutoCommit(f);
}

public void commit(){
  connection.commit();
}

public void back(){
  connection.rollback();
}

и тогда получиться что-то вроде:
Код

db = new DB();

try{
  db.setCommit(false);
  db.clearTable();
  for(int i = 0; i < 5; i++){
    db.insertIntoTable(data);
  }
  db.commit();
}catch(Exception e){
  db.back();
}finally{
db.setCommit(true);
}

я всё правильно понял?
PM MAIL   Вверх
ivanovpv
Дата 15.7.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: 4
Всего: 28



Цитата(lBugl @  15.7.2010,  13:50 Найти цитируемый пост)
я всё правильно понял? 

Да, все правильно только с именованиями у вас беда. Я бы написал так:
Код

public void setAutoCommit(boolean f){
  connection.setAutoCommit(f);
}
public void commit(){
  connection.commit();
}
public void rollback(){
  connection.rollback();
}


А еще красивее сделать так:
Код

public class DB implements java.sql.Connection
{
 ....
}


Тогда все станет совсем просто...


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
lBugl
Дата 15.7.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 18.8.2009

Репутация: нет
Всего: 2



угу, учту =)

спасибо за помощь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1100 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.