最近项目在untiy中使用sqlite作为玩家存档时出现一个问题,在android上当手动使用BEGIN 和 COMMIT批量提交时会报unable to open database file错误,而window上不会。网上查了一下都是这个问题是文件权限问题。
sqlite在开启批量提交或者大量操作的时候可能会用到临时文件,需要临时文件写的权限,而网上一般的说法是需要DB所在文件的目录的权限,所有顺着这个思路我用工具看了一下我自己的目录发现权限是有的!然后依然还是会提示打不开文件的错误。后来在另外一篇文章:https://www.cnblogs.com/hellocwh/p/5061805.html
找的了问题,其实是临时文件目录默认并不是DB所在的文件夹!!!
然后解决问题的方式是手动指定临时文件目录,执行下面的SQL:
PRAGMA temp_store_directory = 'your dir'
这个方式确实可以解决问题,然而官方并不建议用这个方式:http://www.sqlite.org/c3ref/temp_directory.html
那应该用什么方式修改临时目录的位置呢???
不过我找到了另外的方式来解决问题,那就是直接把这个临时文件放在内存中,SQL如下:
PRAGMA temp_store = 2
说明:https://www.sqlite.org/pragma.html#pragma_temp_store
对于一般的手机游戏用来记录玩家存档来说,把临时文件放在内存中应该是可以接受的,如果你的项目不能接受这种方式的话,就还是使用修改临时目录的方式吧。
网友评论