如何通过只输入特定列的字符串值来删除SQLite数据库的完整行?

时间:2017-10-06 21:17:22

标签: android sqlite android-sqlite

我正在使用此方法来获取此字符串的查询:

public void deletedata(){
    p=srt.split(",");

    DatabaseHandler dba=new DatabaseHandler(this);
    for(String s:p) {
        dba.removeSingleproduct(s);
    }

数据库方法是:

public boolean removeSingleproduct(String name) {
        SQLiteDatabase db = this.getWritableDatabase();

        return db.delete(tablename, productinserted + "=" + name, null) > 0;
    }

我想通过调用数据库只删除一行,因为插入的产品可以有两个相同的值。

请帮帮我们。

2 个答案:

答案 0 :(得分:1)

  

由于您要使用selectedValue String进行删除,   在名称

之前和之后添加单引号
return db.delete(tablename, productinserted + " = '" + name + "'", null) > 0;
  

或者您可以简化代码。

public int removeSingleproduct(String name) {
    return getWritableDatabase().delete(tablename, productinserted + " = ?", new String[] { name });
}
  

返回int - the number of rows affected if a whereClause is passed in, 0 otherwise. To remove all rows and get a count pass "1" as the whereClause.

答案 1 :(得分:0)

以下将使用该名称来查找具有所提供名称的所有行,但仅根据它的rowid删除第一行(除非已指定WITHOUT ROWID [很可能不是])。

public boolean removeSingleproduct(String name) {
    boolean rv = false;
    SQLiteDatabase db = this.getWritableDatabase();

    Cursor csr = db.query(tablename,new String[]{"rowid AS dltid"},productinserted + "=?",new String[]{name},null,null,null);
    if(csr.moveToFirst()) {
        rv = db.delete(tablename,"rowid=?",new String[]{Long.toString(csr.getLong(csr.getColumnIndex("dltid")))}) > 0;
    }
    csr.close();
    return rv;
}

如果您希望确保仅在存在多个具有相同 productinserted 名称的行的情况下删除行,则只需更改

    if(csr.moveToFirst()) { ........

    if(csr.moveToFirst() && csr.getCount() > 1) { .......

请注意!可以使用csr.moveToLast()代替csr.moveToFirst(),然后它可能会删除最新添加内容,而不是删除最旧的附加内容。

如果您认为

  

但我还没有定义一个名为rowid的列

然后: -

  

除WITHOUT ROWID表外,SQLite表中的所有行都有一个   64位有符号整数键,用于唯一标识其中的行   表。这个整数通常称为" rowid"。 rowid值可以   使用一个与特殊情况无关的名称" rowid"进行访问,   " oid",或" rowid "代替列名称。如果一个表包含一个   用户定义的列名为" rowid"," oid"或" rowid ",然后该名称   始终引用显式声明的列,不能用于   检索整数rowid值。

SQL As Understood By SQLite - ROWIDs and the INTEGER PRIMARY KEY