Android 使用游标和SQLiteDatabase获取特定行

Android 使用游标和SQLiteDatabase获取特定行,android,cursor,sqliteopenhelper,Android,Cursor,Sqliteopenhelper,使用游标检索表的行时遇到一些问题。 我有3个表:联系人、比赛和球员(最后一个来自nxn关系)。 我想要的是检索我的所有匹配项(当前用户登录),并输入我的id。 以下是我在DatabaseHelper扩展SQLiteOpenHelper类上的表: // Tabella contacts static final String TABLE_NAME="contacts"; static final String COLUMN_ID="id"; static final String COLUM

使用游标检索表的行时遇到一些问题。 我有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";

//这是我的功能

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;
}
而不是在另一节课上,我这样称呼它

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);
            }

我没有亲自测试,但我认为问题在于循环:

do {...}
while (cursor1.moveToNext());
您的日志在循环中,但在打印出日志后,您将执行以下操作:

(cursor1.moveToNext())
因此,再次移动光标

光标1
移动到下一个位置后,返回该光标。我想您只需要删除这个
do while
循环。

我删除了do{..}while(cursor1.moveToNext()),但仍然一样……我没有得到正确的行
do {...}
while (cursor1.moveToNext());
(cursor1.moveToNext())