2012-11-28 120 views
2
public String getCourse_info (String courseID) { 

     String[] columns = new String[] {KEY_COURSE_ID, KEY_COURSE_TITLE, KEY_COURSE_CNUMBER, KEY_COURSE_SUBJECT, KEY_COURSE_DAYS, 
       KEY_COURSE_START_TIME, KEY_COURSE_END_TIME, KEY_COURSE_PROFESSOR, KEY_COURSE_BUILDING, KEY_COURSE_ROOM_NUMBER }; 

     Cursor c = ourDataBase.query(DATABASE_TABLE_COURSES, columns, KEY_COURSE_ID + "=?", new String[]{courseID}, null, null, null); 
     String result = ""; 

     int iCid = c.getColumnIndex(KEY_COURSE_ID); 
     int iCtitle = c.getColumnIndex(KEY_COURSE_TITLE); 
     int iCcnumber = c.getColumnIndex(KEY_COURSE_CNUMBER); 
     int iCsubject = c.getColumnIndex(KEY_COURSE_SUBJECT); 
     int iCdays = c.getColumnIndex(KEY_COURSE_DAYS); 
     int iCstart_time = c.getColumnIndex(KEY_COURSE_START_TIME); 
     int iCend_time = c.getColumnIndex(KEY_COURSE_END_TIME); 
     int iCprofessor = c.getColumnIndex(KEY_COURSE_PROFESSOR); 
     int iCbuilding = c.getColumnIndex(KEY_COURSE_BUILDING); 
     int iCroom_number= c.getColumnIndex(KEY_COURSE_ROOM_NUMBER); 

     for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){ 
      result = result + c.getString(iCid)+ " " +c.getString(iCtitle)+ " "+c.getString(iCcnumber)+" "+ c.getString(iCsubject) + " "+ 
        c.getString(iCdays)+ " "+ c.getString(iCstart_time)+ " "+ c.getString(iCend_time) +" " + 
        c.getString(iCprofessor) + " "+ c.getString(iCbuilding) + " " + c.getString(iCroom_number)+ "\n" ; 
     } 
     Log.d("hello", result+"test2"); 
     return result; 
    } 

好吧,我試圖在數據庫中的一個表上運行此代碼。事情是,如果我通過數據庫中的第一個course_id,它完美的作品。但是,當我嘗試在第二個或任何course_id後,該字符串不顯示任何內容。Sqlite查詢Android

回答

2

也許是因爲條件已經使用

for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()) 

失敗。

表示檢索到第一條記錄後光標到達記錄的末尾。

使用這些語句並檢查它在檢索第一條記錄後不會到達表的末尾。

if (c.moveToFirst()) { 

      Log.d("Entering","moveToFirst"); 
       do { 
         int iCid = c.getColumnIndex(KEY_COURSE_ID); 
    int iCtitle = c.getColumnIndex(KEY_COURSE_TITLE); 
    int iCcnumber = c.getColumnIndex(KEY_COURSE_CNUMBER); 
    int iCsubject = c.getColumnIndex(KEY_COURSE_SUBJECT); 
    int iCdays = c.getColumnIndex(KEY_COURSE_DAYS); 
    int iCstart_time = c.getColumnIndex(KEY_COURSE_START_TIME); 
    int iCend_time = c.getColumnIndex(KEY_COURSE_END_TIME); 
    int iCprofessor = c.getColumnIndex(KEY_COURSE_PROFESSOR); 
    int iCbuilding = c.getColumnIndex(KEY_COURSE_BUILDING); 
    int iCroom_number= c.getColumnIndex(KEY_COURSE_ROOM_NUMBER); 

result = result + c.getString(iCid)+ " " +c.getString(iCtitle)+ " "+c.getString(iCcnumber)+" "+ c.getString(iCsubject) + " "+ 
       c.getString(iCdays)+ " "+ c.getString(iCstart_time)+ " "+ c.getString(iCend_time) +" " + 
       c.getString(iCprofessor) + " "+ c.getString(iCbuilding) + " " + c.getString(iCroom_number)+ "\n" ; 
    } 

     } 

     while (c.moveToNext()); 
     } 
     c.close();  
} 

如果它去到最後一條記錄,那麼它將產生ArrayIndexOutOfBoundsException

2

參見試圖來回此代碼sqlite的查詢,

Cursor query = db.query(table, columns, selection, selectionArgs, groupBy, 
       having, orderBy); 
if (query.getCount() > 0) { 
     for (int i = 0; i < query.getCount(); i++) { 
      int KEY_COURSE_ANY = query.getString(query.getColumnIndex(KEY_COURSE_ANY)); 
     } 
    }