首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在给定一个列值(即字符串)的情况下,删除数据库表中的行

在给定一个列值(即字符串)的情况下,删除数据库表中的行
EN

Stack Overflow用户
提问于 2010-07-23 06:57:31
回答 4查看 26.9K关注 0票数 17

我有一个包含列标题的表:| _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)?

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-23 07:13:14

当然,这是可行的,尽管我建议

dbHelper.delete(DATABASE_TABLE_2, KEY_NAME + "=?", new String[] { myName })

为了安全起见。这样,您就可以在不中断查询的情况下使用特殊字符。这不管用吗?

票数 39
EN

Stack Overflow用户

发布于 2010-07-23 07:08:11

尝试将where子句的值放在引号中...

KEY_NAME + "='" + myName + "'"

此外,使用基于字符串的WHERE子句(通常)也是不好的做法。这是因为如果我的名字中有撇号,你的应用程序将无法工作。你可能应该寻找一种从Android数据库中删除记录的替代方法。

票数 1
EN

Stack Overflow用户

发布于 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 +")");

根据条目数量的不同,你可能会在参数的长度/大小上遇到问题--除此之外,它还会不雅到极致。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3314176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档