使用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);
}
答案 0 :(得分:0)
我自己没有测试过,但我认为问题是循环:
do {...}
while (cursor1.moveToNext());
您的日志位于循环内部,但在打印完日志后,您会执行以下操作:
(cursor1.moveToNext())
所以你再次移动光标。
将cursor1
移动到下一个位置后,返回此光标。我认为您只需要删除此do-while
循环。