如何使用rawQuery检查是否存在db记录?

时间:2018-04-18 03:44:52

标签: 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 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直接删除以检查db存在时有效。所以我的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);";

3 个答案:

答案 0 :(得分:0)

在删除之前还要检查是否(mCursor.getCount() >0)

if (mCursor!=null && mCursor.getCount() > 0) {
         delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});

}

答案 1 :(得分:0)

这一行:

const queryString = '?cn=asdf%20asdf&pn=asdf%20asdf&pe=asdf%40example.com&d=asdf%0A%0Aasdf&ye=test%40example.com&c=1234&tc=true';
const params = new URLSearchParams(queryString);
console.log(params.get('d'));
const queryObj = {};
for (const [key, val] of params.entries()) {
  queryObj[key] = val;
}
console.log(JSON.stringify(queryObj));

应该是:

if (mCursor!=null) {
         delete = db.delete(SchemeShapes.Shape.TABLE_NAME, SchemeShapes.Shape.ID + "= ?", new String[]{String.valueOf(shapeID)});

}

答案 2 :(得分:0)

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();
}