【问题标题】:sqlite corrupt exception in xamarin.iosxamarin.ios 中的 sqlite 损坏异常
【发布时间】:2019-02-12 03:57:33
【问题描述】:

尝试访问 sqlite 数据库时,我在 ios 中不断崩溃。我的应用程序有后台同步过程,它尝试获取数据并将其存储在设备的 sql 数据库中。 一些在 IOS 设备中随机崩溃的方式。

其中一条日志是:

SQLite.SQLiteException: 损坏

SQLiteCommand.ExecuteNonQuery () /Users/vagrant/git/src/SQLite.cs:2334 SQLiteConnection.Execute(System.String 查询,System.Object[] args)/Users/vagrant/git/src/SQLite.cs:673 DataAccessBase.TruncateData (System.Boolean isSyncRestarted) /Users/yagnaios/Documents/Documents - Venu 的 MacBook Pro/Dev_Latest/TCRMobile/TCRMobile/DataAccess/DataAccessBase.cs:93 Home+d__16.MoveNext () /Users/yagnaios/Documents/Documents - Venu 的 MacBook Pro/Dev_Latest/TCRMobile/TCRMobile/Pages/Home.cs:307 ExceptionDispatchInfo.Throw () /Library/Frameworks/Xamarin.iOS.framework/Versions/11.6.1.3/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:152

该应用程序在android中运行良好,但在IOS中却是一个严重的问题,因为一旦数据库损坏,我们将无法使用该应用程序。

【问题讨论】:

  • 您是否同时从多个线程写入数据库?这会不时给你损坏数据库。
  • 是的,我正在从多个线程访问数据库,我们每 x 分钟运行一次同步,这使得很少的 http 调用和更新数据库中的数据。可能在同一时间 UI 正在更新。我们的应用程序需要这个功能,那么将 Sqlite 模式设置为序列化有助于解决这个问题吗?

标签: ios sqlite xamarin.forms xamarin.ios ios-sqlite


【解决方案1】:

您需要配置数据库以序列化其对文件的访问。确保您远离代码中的线程/任务,或者确保一次只有一个线程尝试写入数据库。

欲了解更多信息,您可以访问here

【讨论】:

  • 但在我的应用程序中,有时 UI 线程访问数据库,同时后台同步从多个线程访问数据库。当 ui 线程或任何其他线程访问数据库时,很难停止同步过程。那么如果我将数据库配置为序列化,我的问题是否解决了?
猜你喜欢
  • 2015-04-09
  • 2017-03-02
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 2016-01-10
相关资源
最近更新 更多