Я делаю приложение для Android, где храню некоторые id в базе данных sqlite. В зависимости от действия пользователя я либо добавляю идентификатор, если он еще не добавлен, либо удаляет идентификатор, если он уже добавлен. Но проблема заключается в том, что курсор в моем методе getExhibitor (int id) всегда возвращает true. Я не понимаю, почему. Может ли кто-нибудь помочь?Почему курсор никогда не равен нулю?
public class Interests extends SQLiteOpenHelper {
private Context context;
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="userInterests";
private static final String TABLE_EXHIBITORS="exhibitors";
// Column Names //
private static final String KEY_ID="id";
public Interests(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
final String createQuery="CREATE TABLE IF NOT EXISTS "+TABLE_EXHIBITORS+"("
+KEY_ID+" INTEGER PRIMARY KEY)";
db.execSQL(createQuery);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS"+TABLE_EXHIBITORS);
onCreate(db);
}
public void addExhibitor(int id){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(KEY_ID,id);
db.insert(TABLE_EXHIBITORS,null,values);
db.close();
Toast.makeText(context,"Exhibitor added",Toast.LENGTH_SHORT).show();
}
//This method is faulty//
public boolean getExhibitor(int id){
SQLiteDatabase db=this.getReadableDatabase();
Cursor c=db.query(TABLE_EXHIBITORS,new String[]{KEY_ID},KEY_ID+" = ? ",new String[]{String.valueOf(id)},null,null,null);
c.close();
return (c!=null); //Always true
}
public void removeExhibitor(int id){
SQLiteDatabase db=this.getWritableDatabase();
db.delete(TABLE_EXHIBITORS,KEY_ID+" = ?",new String[]{String.valueOf(id)});
Toast.makeText(context,"Exhibitor removed",Toast.LENGTH_SHORT).show();
db.close();
}
}
В качестве альтернативы используйте [queryNumEntries] (http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries%28android.database.sqlite.SQLiteDatabase,%20java.lang.String,%20java. lang.String,% 20java.lang.String []% 29), чтобы получить только количество совпадающих строк. –