2015-09-05 3 views
0

У меня есть некоторая проблема для нескольких транзакций в greendao Пример У меня уже есть две таблицы с книгой имен и type_book.Android - Green Dao Несколько транзакций

у меня уже есть такой код:

SQLiteDatabase db = bookMasterDao.getDatabase(); 
    db.beginTransaction(); 

    try { 
     bookMasterDao.insert(bookMaster); 
     idBook = bookMaster.getId().intValue(); 
     db.setTransactionSuccessful(); 
    } catch (Exception ex) { 
     System.out.println("Error insert book master " + ex); 
    } finally { 
     db.endTransaction(); 
    } 



    SQLiteDatabase dbTypeBook = typeBookMasterDao.getDatabase(); 
    dbTypeBook.beginTransaction(); 

    try { 
     typeBookMasterDao.insert(bookMaster); 
     dbTypeBook.setTransactionSuccessful(); 
    } catch (Exception ex) { 
     System.out.println("Error insert type book" + ex); 
    } finally { 
     dbTypeBook.endTransaction(); 
    } 

Я хочу, чтобы в случае отказа типа транзакции книга вставки, сделка книга мастера Откат я имею в виду отмены вставки мастер данные книги. Как сделать такую ​​транзакцию?

любая идея, ссылка и пример очень помогите спасибо.

ответ

3

Я думаю, вы неправильно поняли принцип. Попробуйте создать db, запустите транзакцию, оберните базу данных daoMaster, используйте сессию для вставки, а затем установите транзакцию успешно. Посмотрите на код.

SQLiteDatabase db = openOrCreateDatabase("db", MODE_PRIVATE, null); 
DaoMaster.createAllTables(db, true); 

db.beginTransaction(); 
try { 

    DaoMaster daoMaster = new DaoMaster(db); 
    DaoSession daoSession = daoMaster.newSession(); 

    Book book = new Book(); 
    Book2 book2 = new Book2(); 

    //insert on specific session 
    daoSession.getBookDao().insert(book); 

    //set some relation to inserted book 
    book2.setBook(book); 

    //if this fails, book and book2 won't be in db 
    //insert withou specific session 
    daoSession.insert(book2); 

    db.setTransactionSuccessful(); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} finally { 
    db.endTransaction(); 
    db.close(); 
} 
+0

Зачем создавать базы данных еще раз? dao имеет файл DaoMaster и там файл уже создает таблицу, теперь во фрагменте мне нужен такой код, но openOrCreateDatabase не может разрешить в фрагменте. – Name

+0

Не создается снова, он создает таблицы только в том случае, если они не существуют. Просто убедитесь, что у вас есть правая схема db. И да, вы не можете использовать openOrCreateDatabase(), но не должны. Лучшая практика заключается в том, чтобы позволить контексту (активности/приложению) хранить ссылку на базу данных. В любом случае попробуйте getActivity(). OpenOrCreateDatabase() из вашего фрагмента. Это должно работать, даже если я не рекомендую его. – l0v3

+0

спасибо, я понимаю, теперь хочу тест, но я смутился, как отправить справочную базу данных из активности в фрагмент, и каким образом вы очень рекомендуете и безопасны. – Name