我正在使用此方法来获取此字符串的查询:
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;
}
我想通过调用数据库只删除一行,因为插入的产品可以有两个相同的值。
请帮帮我们。
答案 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 });
}
答案 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