Android 如何使用rawQuery检查数据库记录是否存在?
您好,我是android数据库新手,我有一个在画布上绘制矩形和圆形的应用程序。有一个删除按钮可以删除我绘制的形状。在我的ShapesDbHelper.java中,我有一个名为deleteShape的方法,在删除之前必须检查db记录是否存在Android 如何使用rawQuery检查数据库记录是否存在?,android,database,Android,Database,您好,我是android数据库新手,我有一个在画布上绘制矩形和圆形的应用程序。有一个删除按钮可以删除我绘制的形状。在我的ShapesDbHelper.java中,我有一个名为deleteShape的方法,在删除之前必须检查db记录是否存在 public boolean deleteShape(int shapeID) { boolean result = false; //did the delete succeed or not //check if db record is
public boolean deleteShape(int shapeID) {
boolean result = false; //did the delete succeed or not
//check if db record is present
SQLiteDatabase db = this.getReadableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM " + SchemeShapes.Shape.TABLE_NAME + " WHERE SchemeShapes.Shape.ID = ?",new String[]{String.valueOf(shapeID)} );
int delete =0
if (mCursor!=null) {
delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});
}
if (delete!=0){
result=true;
}
mCursor.close();
db.close();
return result;
}
但是,只有当我直接删除而不使用rawQuery检查数据库是否存在时,delete按钮才起作用。所以我的rawQuery输入参数一定有问题。我已经阅读了文档,但我并不真正理解它
这是我的createTable方法。任何帮助都将不胜感激
private final static String SHAPES_TABLE_CREATE =
"CREATE TABLE " +
SchemeShapes.Shape.TABLE_NAME + " (" +
SchemeShapes.Shape.ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
SchemeShapes.Shape.SHAPE_NAME + " TEXT, " +
SchemeShapes.Shape.SHAPE_TYPE + " TEXT," +
SchemeShapes.Shape.SHAPE_X + " INTEGER," +
SchemeShapes.Shape.SHAPE_Y + " INTEGER," +
SchemeShapes.Shape.SHAPE_WIDTH + " INTEGER," +
SchemeShapes.Shape.SHAPE_HEIGHT + " INTEGER," +
SchemeShapes.Shape.SHAPE_RADIUS + " INTEGER," +
SchemeShapes.Shape.SHAPE_BORDER_THICKNESS + " INTEGER," +
SchemeShapes.Shape.SHAPE_COLOR + " TEXT);";
在删除之前还要检查(mCursor.getCount()>0)
if (mCursor!=null && mCursor.getCount() > 0) {
delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});
}
这一行:
if (mCursor!=null) {
delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});
}
应该是:
if (mCursor!=null && mCursor.moveToFirst()) {
delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});
}
我希望这对你有用。
//检查id是否存在
公共布尔CheckRecordInDBorNot(字符串id){
String Query=“Select*from SchemeShapes.Shape.TABLE_NAME where SchemeShapes.Shape.ID=”“+ID+””;
Cursor Cursor=db.rawQuery(查询,空);
if(cursor.getCount())在删除之前,我已经尝试过if mCursor!=null mCursor.moveToFirst(),但在我按下删除按钮后,应用程序仍然崩溃。请发布崩溃日志
I hope this will work for you.
//For Check id is present or not
public boolean CheckRecordInDBorNot(String id) {
String Query = "Select * from SchemeShapes.Shape.TABLE_NAME where SchemeShapes.Shape.ID='" + id + "'";
Cursor cursor = db.rawQuery(Query, null);
if (cursor.getCount() <= 0) {
cursor.close();
return false;
}
cursor.close();
return true;
}
//for Delete
public void deleteShape(String id){
long l= db.delete("SchemeShapes.Shape.TABLE_NAME", " SchemeShapes.Shape.ID"+ " = ?", new String[]{id});
Log.e("count",""+l);
}
//paste these method and check this way.
if(CheckRecordInDBorNot(your id)){
deleteShape(your id);
}else{
Toast.makeText(getActivity(), "Record Not Present...", Toast.LENGTH_SHORT).show();
}