標籤:
本人處於本科畢業階段,畢業設計要做一個安卓平台,對於java還是小白的我確實有點難度,不過在做的過程中還是收穫很多,現在希望把自己在這個過程中遇到的各個問題和朋友們分享,大神們不喜勿噴,由於畢業設計要做半年,所以接下來的這個系列差不多也要寫將近半年吧,我盡量堅持。
下面就開始吧!!
一.查詢sqlite資料庫時遇到的問題
相必對於所有的Android開發人員來說,sqlite一定不陌生,今天我第一次接觸就被她虐了40分鐘,真是慚愧。關於資料庫的其他動作我就不多說了,大家一定都很清楚,我著重說一下在查詢資料庫時遇到的問題。
查詢資料庫一半我們用的都是cursor這個類,關於這個類我個人感覺她有點像C語言中的指標,用不好就出問題,被CursorIndexOutOfBoundsException虐過的人在心裡默默的答一下到。一般來說這個問題都是你沒有把cursor對象指向表的第一行。解決方案也很簡單
Cursor c = db.query(table,columns,selection,selectionArgs,null,null,null); if(c.moveToFirst()) { //讀資料代碼 } else{ System.out.println("no record"); }
註:上述代碼只是一個範例程式碼,沒有寫完全,特此說明,本人開始的時候也是看到網上的代碼就直接拿過來用後來發現用不了才知道沒寫完全,以後My Code除了完整的方法代碼和程式碼,別的只作樣本,如果大家想用(我有點厚臉皮,哈哈),還要自己添加一下。
繼續回到正題,今天我遇到的問題是關於moveToFirst()和move(int offset)的配合使用,直接上代碼說明:
public String queryData_query(SQLiteDatabase db,String table,String[]columns,String selection,String[] selectionArgs){ Cursor c = db.query(table,columns,selection,selectionArgs,null,null,null); //查詢並獲得遊標 for(int i=0;i<c.getCount();i++) { if(c.moveToFirst())//判斷遊標是否為空白 { c.move(i);//移動到指定記錄 username = c.getString(c.getColumnIndex("username")); System.out.println("query------->username="+username); } else{ System.out.println("no record"); break; } } c.close(); return username; }
move這個方法給我很大困擾,大家注意她的參數是offset,即位移值,說明下一個cursor的位置=當前cursor的位置+offset,而不是網上有的地方說的代表表的某一行,而且要用這個方法的話就要保證起始地址不變,即保證c.moveToFirst()在每次變位移值的時候都要執行一次,這個有點像單片機中基址+變址的定址方式。
編寫一個Android平台遇到的所有問題(一)——查詢sqlite資料庫時遇到的問題