2013-06-22 54 views
0

我在Android应用程序中更新SQLite数据库中的行时遇到问题。如果我更新两次,它只能成功运行。但是当我第三次尝试这样做时,它不再更新同一行。Android SQLite Update在调用两次后停止工作

LogCat不显示任何异常。 db.update()返回'1'

我在StackOverflow和网上搜索了类似的问题。人们advic] sed从database-helper删除db.close();,因为我多次称它,或者使用db.update方法代替db.rawQuery()db.execSQL()

我也在SQLite客户端测试了我的查询,它的工作原理与它应该的一样。

下面是简单的数据库的helper方法的代码:

public int updateEventDoneMark(Event event) 
{ 
    ContentValues args = new ContentValues(); 
    args.put("completed", event.getCompleted()); 
    return db.update("Event", args, "id" + "='" +event.getId() + "'", null); 
} 

有一些SQLite的相关问题,我应该知道,而我连续更新一个数据库条目几次?

+0

您可能希望切换到位置参数:'db.update(“Event”,args,“id =?”,params);'where where String [] params = {event.getId()};'除此之外,没有神奇的东西“两个更新“限制,确保你的线程工作正常,代码实际上正在执行,等等。 – CommonsWare

+0

@CommonsWare感谢您的快速响应!我已经尝试了您的建议,并没有产生影响 有没有任何其他线程同时改变数据,每次执行代码,每次返回'1'作为影响数ed.rows。 – antken

+0

你的内容提供者更新和URI匹配是什么样的? –

回答

0

你的内容提供者更新和URI匹配是什么样的?

典型的内容提供者对于单个行的每个Table/View都有一个URI,其中_id作为where_argument传递,多个行使用where和where_arguments来选择要更新的行。

此外,它看起来像你更新编号。 Android真的需要名为“_id”的id列,尽管我不认为这是你的问题,但它确实取决于它使用的URI。内容提供者通常使用_id进行编码,并根据_id单列选择列。这就是为什么我想看到内容提供商。你自己也选择了ID,这看起来不正常,虽然它可以完成,但不是标准。通常情况下,其中一部分是像“colunm名=?”和下一个参数where_arguments是包含值来替换一个字符串数组‘?’。

希望这有助于。

+0

我没有使用Content Provider,并试图直接执行查询,这通常是一个坏主意。一旦我开始使用Content Provider,问题本身就解决了。 – antken

+0

对于等待两年接受答案感到抱歉 – antken

相关问题