Reputation: 149
I am making an android app where I am storing some id's in a sqlite database. Depending upon user's action I'm either adding the id if not already added or removing the id if already added. But the problem is the cursor in my method getExhibitor(int id) is always returning true. I dont understand why. Can anybody help?
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();
}
}
Upvotes: 1
Views: 335
Reputation: 34542
You should check the cursors content.
You always get the resulting rows of your query, they may be empty, but not null.
While the cursor will not be null
since you made a valid query, it will probably have a getCount() == 0
, or 1
, depending if it is in the db or not.
Upvotes: 4