如何从包含特定字符串的列的表中删除行?

时间:2019-10-22 11:31:56

标签: android android-sqlite

作为我的标题问题,我想删除SQLite上包含特定字符串的表的某些行。 这是我尝试过的方法,但是没有任何行被删除。我通过检查SQLite数据库表并将其放入从https://sqlitebrowser.org/下载的SQLite数据库浏览器中

  public void delete1(String table,String COLUMN,String link) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.execSQL("DELETE FROM "+table+" WHERE "+COLUMN+" LIKE "+link+"%");
   }

 public void delete2(String table,String name){ 
   SQLiteDatabase db = this.getWritableDatabase();
   db.delete(table, "PRODUCTNAME" + "LIKE ?", new String[]{name+"%"}) ;
  }

您能告诉我怎么做或我如何更正代码吗?

1 个答案:

答案 0 :(得分:0)

使用db.delete(table, "PRODUCTNAME " + "LIKE ?", new String[]{name+"%"}) ;只会删除以name中的值开头的行。

您想要的Perhpas:-

db.delete(table, "PRODUCTNAME " + "LIKE ?", new String[]{"%"+name+"%"}) ;

然后它将删除包含该值的行,而不是以该值开头的行。

使用db.execSQL("DELETE FROM "+table+" WHERE "+COLUMN+" LIKE "+link+"%");,您需要将字符串括在单引号中,并假设要删除包含该值的行,然后使用:-

db.execSQL("DELETE FROM "+table+" WHERE "+COLUMN+" LIKE '%"+link+"%'"); 
  • 使用 delete 便捷方法(第一部分)是更好的选择,因为它可以防止SQL注入,可以正确封装值,构建基础SQL并返回受影响的数目(已删除) )行。

如果使用以下命令,这将编写圆顶调试信息,这可能有助于调试:-

public void delete2(String table,String name){ 
   SQLiteDatabase db = this.getWritableDatabase();
   Log.d("DELETEINFO","Attempting to delete rows with \n\t->" + name); 
   int deletedCount = db.delete(table, "PRODUCTNAME " + "LIKE ?", new String[]{"%"+name+"%"}) >0) ;
   Log.d("DELETEINFO","Deleted " + deletedCount + " rows.");
}