我有一个包含列标题的表:| _id (长整型)| Name (字符串)|x(整数)|y(整数)|
我想删除表中名为myName的行。
// In onCreate
dbHelper = new DBAdapter(this);
dbHelper.open()
// Function in DBAdapter class
public boolean deleteTitleGivenName(String myName)
{
return dbHelper.delete(DATABASE_TABLE_2, KEY_NAME + "=" + myName, null) > 0;
}
// Function call in java code
dbHelper.deleteTitleGivenName(myName); // this is where my code fails
dbHelper.close();
需要注意的是: myName肯定在数据库中。另外,我不能使用ROWID,因为我是从ListView获取myName。
我刚刚开始使用Android编程,我已经尝试了几天来解决这个问题。我的WHERE子句是否正确(KEY_NAME + "=“+ myName)?
提前谢谢。
发布于 2010-07-23 07:13:14
当然,这是可行的,尽管我建议
dbHelper.delete(DATABASE_TABLE_2, KEY_NAME + "=?", new String[] { myName })
为了安全起见。这样,您就可以在不中断查询的情况下使用特殊字符。这不管用吗?
发布于 2010-07-23 07:08:11
尝试将where子句的值放在引号中...
KEY_NAME + "='" + myName + "'"
此外,使用基于字符串的WHERE子句(通常)也是不好的做法。这是因为如果我的名字中有撇号,你的应用程序将无法工作。你可能应该寻找一种从Android数据库中删除记录的替代方法。
发布于 2012-07-23 23:47:23
根据where条件的复杂程度,"delete“方法不是最佳解决方案。
例如,如果您想要删除其" _id“在第二个表中的所有记录,就像您在transactSQL中所写的:"...WHERE _id in (SELECT _id FROM...”那么最好的解决方案可能是直接在数据库上使用".execSQL()“方法。
myDatabase.execSQL("DELETE FROM myTable WHERE _id IN (SELECT _id FROM myOtherTable)");
或者你可以变得非常丑陋,这样做:
int cursorRows = cursor.getCount();
String[] id2String = new String[cursorRows];
String id2StringUnique = "";
//for (int i=0;i<cursorRows;i++) {
int i=0;
for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){
id2String[i] = String.valueOf(cursor.getLong(index_ID));
if (i==0) {
id2StringUnique = "'"+id2String[i]+"'";
} else {
id2StringUnique += ",'"+id2String[i]+"'";
}
i++;
}
dbHelper.delete(DATABASE_TABLE_2, "_id IN (", id2StringUnique +")");
根据条目数量的不同,你可能会在参数的长度/大小上遇到问题--除此之外,它还会不雅到极致。
https://stackoverflow.com/questions/3314176
复制相似问题