【问题标题】:Android sqlite delete doesn't actually delete rowsAndroid sqlite delete 实际上并没有删除行
【发布时间】:2011-10-16 13:21:59
【问题描述】:

我正在使用一个相当简单的命令来尝试删除 SQLite 数据库中的行。但是,成功运行该命令后,这些行仍保留在 DB 中!?

SQLiteDatabase dbinst = mydb.getWritableDatabase();

try
{
  dbinst.beginTransaction();
  int del = dbinst.delete("sms", "wassent = ? or waserror = ? or wasaborted = ?", new String[] {"1", "1", "1"} );   
  clog.debug("Rows deleted: " + del);
  dbinst.setTransactionSuccessful();
}
catch(Exception e)
{
  clog.error(e.toString(),e);
}

dbinst.close();

记录器说“行已删除:3”,没有出现异常。但是,之后立即进行查询时,行仍然存在吗?

我在这里做错了什么明显的事情吗?

【问题讨论】:

  • 你解决了吗?

标签: android sqlite delete-row


【解决方案1】:

您必须致电endTransaction 才能实际提交更改。更多信息可以在这里找到:beginTransaction() documentation

【讨论】:

  • 说,实际使用事务进行简单删除有什么帮助吗?以及要删除多行的单个删除怎么样?在性能或线程安全方面有更好的表现吗?
  • @androiddeveloper 如果您想以原子方式更新多个表(所有更新工作或全部失败,没有混合结果),事务处理非常有用。此外,如果您的应用程序无法处理用户在表更新期间拉电池的问题,请使用事务。
  • 有道理。但是如果我知道删除操作只针对单行,它有用吗?多行呢?就线程安全而言,在没有事务的情况下使用删除会很危险吗?我的意思是,这个“db.delete(...)”线程安全吗?
  • @androiddeveloper 默认情况下,所有数据库交互都是线程安全的。事务对您的应用程序的有用性取决于我在之前的评论中列出的因素。如果您只是更新一行,那么事务不会给您带来任何额外的好处。如果您担心性能,那么您可能想多了。
  • 那么无论数据库操作多么复杂,它都是线程安全的吗?好的,谢谢。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多