2015-09-05 70 views
0

我在greendao多筆交易中遇到了一些問題 例如我已經有兩張帶名簿和type_book的表。Android - Green Dao多筆交易

我已經有這樣的代碼:

​​

我想,如果交易類型的書未能插入,交易書主回滾我的意思是取消插入數據的書的主人。如何做這樣的交易?

任何想法,參考和例子非常幫助謝謝。

回答

3

我想你誤會了這個principe。嘗試創建數據庫,啓動事務,用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

爲什麼要重新創建數據庫?道生成器有文件DaoMaster和在那裏文件已經創建表,現在在片段我想要的代碼,但openOrCreateDatabase無法解析的片段。 – Name

+0

它不會再次創建,它僅在不存在時創建表。只要確定你有正確的數據庫模式。 是的,你不能使用openOrCreateDatabase(),但你不應該。更好的做法是讓上下文(活動/應用程序)保存數據庫引用。 無論如何,請從片段中嘗試getActivity()。openOrCreateDatabase()。這應該工作,即使我不推薦它。 – l0v3

+0

謝謝,我現在明白我想測試,但我很困惑如何將參考數據庫從活動發送到片段,以及您非常推薦和安全的方式。 – Name