使用Cursor和SQLiteDatabase获取特定行

时间:2016-05-18 12:16:26

标签: android cursor sqliteopenhelper

使用Cursor重新获取表的行时遇到一些问题。 我有3个表:联系人,匹配和玩家(这最后来自nxn关系)。 我想要的是检索我的所有匹配(当前用户登录)作为输入我的ID。 这是我在类DatabaseHelper上的表扩展SQLiteOpenHelper:

// 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不会让我回到正确的行,但同时Log输出也没问题。我该怎么办?

因为如果我想要回到整个桌子那就很容易了..

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

而不是另一个班级我称之为......

Cursor cursor=databaseHelper.getMatch(db);


String id_partita,nome_partita,citta,indirizzo,data,ora;
            while (cursor.moveToNext()){
                id_partita=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID_MATCH));
                nome_partita=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME_MATCH));
                citta=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_CITTA));
                indirizzo=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_INDIRIZZO));
                data=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_DATA));
                ora=cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_ORA));
                  match=new Match(id_partita,nome_partita,citta,indirizzo,data,ora);
                publishProgress(match);
            }

1 个答案:

答案 0 :(得分:0)

我自己没有测试过,但我认为问题是循环:

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

您的日志位于循环内部,但在打印完日志后,您会执行以下操作:

(cursor1.moveToNext())

所以你再次移动光标。

cursor1移动到下一个位置后,返回此光标。我认为您只需要删除此do-while循环。