Android SQLite:如何在删除行之前知道数据存在

8gsdolmq  于 2023-04-30  发布在  SQLite
关注(0)|答案(4)|浏览(132)

尝试使用query by id删除表中的行。假设id不存在,那么如何知道id或行信息不存在?
代码如下:

public void deletePerson(String personId){
        SQLiteDatabase sqldb = getWritableDatabase();
        sqldb.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_NAME + " = '" + personId+"'");
        Toast.makeText(context,"Record removedId", Toast.LENGTH_SHORT).show();
    }
9q78igpj

9q78igpj1#

您不一定需要知道,如果没有满足where条件的记录,DELETE不会失败。
但是,如果您需要知道行是否被删除,那么如果您使用delete方便方法,它将返回受影响的行数。如果为0,则不删除任何行。
因此,代码可以是:

public void deletePerson(String personId){
    SQLiteDatabase sqldb = getWritableDatabase();
    if (sqldb.delete(TABLE_NAME,COLUMN_NAME + "=?",new String[]{personId}) > 0) {
        Toast.makeText(context,"Record removedId", Toast.LENGTH_SHORT).show();
    }
}

*delete方便方法从传递的最小参数集生成,编码包括将值括在单引号中,因此它减少了语法错误的机会。

  • 此外,它还提供了针对SQL注入攻击的保护。
  • 第三个参数是一个数组,可以有多个参数,每个参数根据序列匹配**?**(由值替换)。
  • 即第一个?被第一个元素的值替换,第二个?被第二个元素的值替换,依此类推。
  • 和元素数必须匹配。
inkz8wg9

inkz8wg92#

public boolean getPerson(String personId){
    SQLiteDatabase sqldb = getWritableDatabase();
    Cursor c=     sqldb.execSQL("SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_NAME + " = '" + personId+"'");
    if(c!=null){
        return true;
    }
    return false;
}
wd2eg0qa

wd2eg0qa3#

您可以创建一个函数,根据sqlite中存在的数据返回boolean value

public boolean isExists(String personId)
{
    SQLiteDatabase sqldb = getWritableDatabase();
    String selectString = "SELECT * FROM " + _TABLE + " WHERE " + _ID + " =?";
    Cursor cursor = sqldb.rawQuery(selectString, new String[] {personId}); 

    boolean isExist = false;

    if(cursor.moveToFirst()){
       isExist = true;
    }

    sqldb.close();              
    return isExist;
}

引用自Android SQLite Database CRUD

mrfwxfqh

mrfwxfqh4#

好吧,在得到你所有的答案后,我解决了我的问题,我所做的是:

public void deletePerson(String personId){
        SQLiteDatabase sqldb = getWritableDatabase();
        Cursor cursor = sqldb.rawQuery("SELECT " + COLUMN_NAME + " FROM " + TABLE_NAME + " WHERE " + COLUMN_NAME + " = '" + personId + "'", null);
        if(cursor.getCount()!=0){
            sqldb.execSQL("DELETE FROM " + TABLE_NAME + " WHERE " + COLUMN_NAME + " = '" + personId + "'");
            Toast.makeText(context,"Successfully deleted", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(context,personId+" not found", Toast.LENGTH_LONG).show();
        }
    }

谢谢!

相关问题