Android 使用游标和SQLiteDatabase获取特定行
使用游标检索表的行时遇到一些问题。 我有3个表:联系人、比赛和球员(最后一个来自nxn关系)。 我想要的是检索我的所有匹配项(当前用户登录),并输入我的id。 以下是我在DatabaseHelper扩展SQLiteOpenHelper类上的表: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
// 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())