【问题标题】:Mono.Data.Sqlite.SqliteConnection.SetConfig throws a Library used incorrectly exceptionMono.Data.Sqlite.SqliteConnection.SetConfig 引发 Library used wrongly 异常
【发布时间】:2013-03-04 07:22:51
【问题描述】:

使用 Xamarin.Android,我尝试使用 Mono.Data.Sqlite 包(使用 Nexus 7)使用 sqlite 数据库。

一切都很好,直到我尝试使用多个线程,然后我得到一个损坏的数据库或各种异常锁定数据库(这意味着我必须停止并重新启动应用程序才能再次访问数据库)。

按照here 的建议,我已尝试在我的应用程序中尽早执行以下代码:

Mono.Data.Sqlite.SqliteConnection.SetConfig (Mono.Data.Sqlite.SQLiteConfig.Serialized);

但我在该行收到 Mono.Data.Sqlite.SqliteException 说明:

Library used incorrectly

我已经尝试了枚举的 3 个可能值(单线程、序列化、多线程),结果相同。

这种方法真的有效吗?


编辑:我修复了我的源代码问题(那些讨厌的无限循环,我永远不会摆脱它......),所以不再需要为我使用线程配置。

不过,我会将问题留给其他人,因为问题仍然存在,并且已被其他人试验过 (cf the comments on this answer)

【问题讨论】:

  • +1。在哪里调用它都没关系。在 Android.Application 子类中,启动活动的 OnCreate 或只是单击按钮。
  • 嗯,这确实很重要:它应该在 sqlite3_initialize() 之前。证明sqlite.org/c3ref/config.html.

标签: c# android xamarin.android xamarin


【解决方案1】:

对于它的价值,我发现 SQLite 在对数据库进行写入时尝试访问非常敏感。话虽这么说,我不太反对我的。但是我确实想提一下,您可能对可读访问和多线程感到幸运。如果您还没有这样做,我建议使用显式的写/读路径调用它。我在我的代码中使用它来简化,

         protected SQLiteConnection ReadableDB
         {
             get{return new SQLiteConnection(ReadableDatabase.Path);}
          }

         protected SQLiteConnection WriteableDB
         {
             get{return new SQLiteConnection(WritableDatabase.Path);
         }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2016-08-31
    • 2013-08-02
    • 2012-10-10
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多