2016-05-18 49 views
-1

使用Cursor獲取表格行的某些問題。 我有3個表格:聯繫人,匹配和玩家(最後從nxn關係中出來)。 我想要的是檢索我的所有匹配(當前用戶登錄)作爲輸入我的ID。 這裏是我的階級DatabaseHelper表擴展SQLiteOpenHelper:使用Cursor和SQLiteDatabase獲取特定行

// Tabella contacts 
static final String TABLE_NAME="contacts"; 
static final String COLUMN_ID="id"; 
static final String COLUMN_NAME="name"; 
static final String COLUMN_EMAIL="email"; 
static final String COLUMN_USERNAME="username"; 
static final String COLUMN_PASSWORD="password"; 


//Tabella match 
    static final String TABLE_MATCH="match"; 
    static final String COLUMN_ID_MATCH="id_match"; 
    static final String COLUMN_NAME_MATCH="name_match"; 
    static final String COLUMN_CONTATTO_MATCH="id_contatto"; 
    static final String COLUMN_MAX_GIOCATORI="max_giocatori"; 
    static final String COLUMN_CITTA="citta"; 
    static final String COLUMN_INDIRIZZO="indirizzo"; 
    static final String COLUMN_DATA="data"; 
    static final String COLUMN_ORA="ora"; 
    static final String COLUMN_LATITUDE="latitude"; 
    static final String COLUMN_LONGITUDE="longitude"; 

    // Tabella Player 
    static final String TABLE_PLAYER="player"; 
    static final String COLUMN_ID_PLAYER="id_player"; 
    static final String COLUMN_ID_CONTACT_PLAYER="id_contact_player"; 
    static final String COLUMN_ID_MATCH_PLAYER="id_match_player"; 

...

@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(TABLE_CREATE); 
     db.execSQL(TABLE_CREATE_MATCH); 
     db.execSQL(TABLE_CREATE_PLAYER); 

     this.db=db; 

    } 

...

public String getContact() { 
     return contact3; 
    } 

//這裏是我的功能...

public Cursor getMyMatchList3(SQLiteDatabase db){ 

//  db=this.getReadableDatabase(); 
     databaseHolder=new DatabaseHolder(); 
     String contatto=databaseHolder.getContact(); 
     String query="select id_contact_player,id_match_player from "+TABLE_PLAYER; 
     String query1="select * from "+TABLE_MATCH; 
     Cursor cursor=db.rawQuery(query,null); 
     Cursor cursor1=db.rawQuery(query1, null); 
     String id_contatto_player; 
     String id_partita; 
     String nome,citta,indirizzo,data,ora; 

     if(cursor.moveToFirst()){ 
      do{ 
       id_contatto_player=cursor.getString(0); 
       if (id_contatto_player.equals(contatto)){ 
        id_partita=cursor.getString(1); 
        Log.e("ID_MATCH_PLAYER",id_partita); 
        if (cursor1.moveToFirst()){ 
         do{ 
          if (id_partita.equals(cursor1.getString(0))){ 
           id_partita=cursor1.getString(0); 
           nome=cursor1.getString(1); 
           citta=cursor1.getString(4); 
           indirizzo=cursor1.getString(5); 
           data=cursor1.getString(6); 
           ora=cursor1.getString(7); 
           Log.e("ID_PARTITA_CURSOR_1",id_partita); 
           Log.e("nome",nome); 
           Log.e("citta",citta); 
           Log.e("indirizzo",indirizzo); 
           Log.e("data",data); 
           Log.e("ora",ora); 
           return cursor1; 
          }  
         } 
         while (cursor1.moveToNext()); 
        } 
       } 
      } 
      while (cursor.moveToNext()); 
     } 
     return cursor1; 
    } 

但是用這種方式,cursor1,並沒有讓我回到正確的行,但同時日誌輸出是正確的。我能怎麼做??

原因,如果我想回整個表的匹配很容易..

public Cursor getMatch(SQLiteDatabase db){ 
    String query="select * from "+TABLE_MATCH; 
    Cursor cursor=db.rawQuery(query,null); 
    return cursor; 
} 

比其他類我把它稱爲這樣的方式......

回答

0

我沒有測試它自己,但我認爲問題是循環:

do {...} 
while (cursor1.moveToNext()); 

您的日誌是在循環內,但在日誌打印出來後,您可以:

(cursor1.moveToNext()) 

所以你再次移動你的光標。

而您將cursor1移動到下一個位置後,您將返回此光標。我想你只需要刪除這個do-while循環。

+0

我刪除了do {..} while(cursor1.moveToNext())但仍然一樣...我沒有得到正確的行 – Koalito