考慮到我們的接口文檔可能不是很清晰,昨天對接的時候也發現UI人員對我們的接口邏輯不太理解,所以這里寫幾個典型范例。雖然對接也快對接完了(逃,但是這樣至少免得以后忘記了。
(注:這里的代碼都測試過,放在HeartTrace\app\src\androidTest\java\com\example\dell\db\examples\
中。持續性更新。)
幾個基本原則
任何新建的對象,在insert之前,是不會到數據庫里的!!!!!!不管怎樣都不會!!!!!!!!!
任何已有的對象,在修改之后,如果不update,修改也不會被更新到數據庫里!!!!!!!!!不管怎樣都不會!!!!!!!!!!
只有通過getAll, getByRestrict, getAllLabel等方法獲取的Diary Sentence Label Diarybook Sentencebook對象才指向數據庫中的一個表項,直接new的會被認為是一個新的表項!!!
注:
Diary要求:text(日記內容)可以為空,date(日期)不能為空,diary book(日記本)可以為空(TODO:這個以后肯定會改成不能為空的!)
Sentence要求:text(日記內容)可以為空,date(日期)不能為空,sentence book(瓶子)不能為空
Diarybook要求:name(名字)不能為空,且彼此不能重復
Sentencebook要求:name(名字)不能為空,且彼此不能重復
獲取、釋放DatabaseHelper
方法1:
// 獲取
DatabaseHelper helper = new DatabaseHelper(context); // 這個context視情況而定,可能是this或者getApplicationContext()
// 釋放
helper.close();
方法2:
// 獲取
DatabaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class); // context同上
// 釋放
OpenHelperManager.releaseHelper();
目錄
Example 0. 將一個新的日記插入已有日記本,並插入標簽
Example 1. 通過名字判斷某個瓶子是否存在;如果不存在,則新建這個瓶子。並將新建的小紙條插入這個瓶子
Example 2. 通過單個Label查找所有的Diary
一些常見的錯誤操作
Example 0. 將一個新的日記插入已有日記本,並插入標簽
前提:diarybook是一個已經插入數據庫的日記本,helper是已有的DatabaseHelper
Diary diary = new Diary("hiasjfhlaf");
diary.setDate();
diary.setDiarybook(diarybook);
diary.insert(helper);
Label label1 = new Label("label1");
label1.insert(helper);
Label label2 = new Label("label2");
label2.insert(helper);
diary.insertLabel(helper, label1);
diary.insertLabel(helper, label2);
List<Label> list = diary.getAllLabel(helper);
for(Label l : list) {
Log.d(getClass().getName(), "testExample0: label " + l.getLabelname());
}
如果想要對已有的diary進行insertLabel操作,其實完全同理。
Example 1. 通過名字判斷某個瓶子是否存在;如果不存在,則新建這個瓶子。並將新建的小紙條插入這個瓶子
前提:helper是已有的DatabaseHelper,bookName是已有的String。
Sentencebook b = Sentencebook.getByName(helper, bookName);
if(b == null) {
b = new Sentencebook(bookName);
b.insert(helper);
}
Sentence sentence = new Sentence("adfjanvnavop");
sentence.setDate();
sentence.setSentencebook(b);
sentence.insert(helper);
如果想要通過名字獲得某個Label,假如不存在就新建Label,代碼同理。
Example 2. 通過單個Label查找所有的Diary
前提:helper是已有的DatabaseHelper,label已經在數據庫內(這個很重要,不然會報錯的)。
List<Label> labelList = new ArrayList();
labelList.add(label);
List<Diary> d = Diary.getByRestrict(helper, null, null, null, labelList, true);
一些常見的錯誤操作
對於Label Diarybook Sentencebook這三個要求名字不能重復的類,如果重復插入名字相同的對象肯定會崩潰的。
另 關於出了問題怎么辦
如果是和數據庫有關的錯誤,請立刻聯系數據庫人員,不要試圖自己瞎jb調!
把一小段代碼發過來有時候是有用的,但有的時候是沒用的。比較好的方法是把整個工程文件弄過來,然后告訴數據庫人員如何復現情景,因為數據庫人員 真 的 不知道你們點哪個鍵怎么跳轉,怎么才能觸發錯誤……
當然最好的方法是帶着電腦,跟數據庫的人面♂調
問:如果現在有一個錯誤,但是三個寫數據庫的人都不理我怎么辦?
答:買個西瓜/冰淇淋,到空調房里看電影或寫作業,直到寫數據庫的人回復
或者,如果水群在線只是不想理你的話,可以提出給水群買個奶茶w