Unity中使用Sqlite,报只读异常

2回答

Unity中使用Sqlite,报只读异常

提问者 ^巧利^ 2018-03-12 309浏览
sqlite使用情况:db存放目录Application.temporaryCachePath,只在主线程中使用了,也做了多线程保护:
            Monitor.Enter(enterObj);
            int r = command.ExecuteNonQuery();
            Monitor.Exit(enterObj);

Meizu PRO 6上偶现,启动游戏后,原本db读写正常,突然写db报异常,堆栈如下:

TotalTime:60000,HandlerName:CTimer+OnTimeUpHandler,Exception:Mono.Data.Sqlite.SqliteException: Attempt to write a read-only database
attempt to write a readonly database
  at Mono.Data.Sqlite.SQLite3.Reset (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <filename unknown>:0 
  at Mono.Data.Sqlite.SQLite3.Step (Mono.Data.Sqlite.SqliteStatement stmt) [0x00000] in <filename unknown>:0 
  at Mono.Data.Sqlite.SqliteDataReader.NextResult () [0x00000] in <filename unknown>:0 
  at Mono.Data.Sqlite.SqliteDataReader..ctor (Mono.Data.Sqlite.SqliteCommand cmd, CommandBehavior behave) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) Mono.Data.Sqlite.SqliteDataReader:.ctor (Mono.Data.Sqlite.SqliteCommand,System.Data.CommandBehavior)
  at Mono.Data.Sqlite.SqliteCommand.ExecuteReader (CommandBehavior behavior) [0x00000] in <filename unknown>:0 
  at Mono.Data.Sqlite.SqliteCommand.ExecuteNonQuery () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) Mono.Data.Sqlite.SqliteCommand:ExecuteNonQuery ()
  at Assets.Scripts.Module.Chat.DataSave.ExcuteCommand (System.String sqlText) [0x00000] in <filename unknown>:0 

请教各位有没有遇到类似的问题,如何解决?

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • 落葉歸根 2018-03-12 13:34
    看log信息是你打开数据库的时候用的是只读形式Mono.Data.Sqlite.SqliteDataReader:.ctor 
    应该是你数据库打开或重连的时候调错接口了
    0评论
  • 上善若水 2018-03-26 14:47
    这本质就是读写文件.
    读写常见失败原因.
    1权限.
    2读写文件不存在
    3文件被占用未释放.
    4空间不足写入失败.
    5写入过程中代码出错.
    如果都过了 理论上不会失败.
    你这写一段时间之后报错.
    3文件被占用未释放.
    4空间不足写入失败.
    5写入过程中代码出错.
    应该是这个范围.

    建议单独开个线程 这一块单独处理数据库(减少排查范围)
    比如做个命令队列,线程轮询处理命令,保证命令执行完毕,
    再执行下一条,杜绝并发的可能.
    0评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答