2012-06-11 165 views
0

数据库可以使用相同的加密密钥打开(),并且工作正常。尝试使用多个加密数据库 - 全部都可以打开,但不能连接。无法附加加密的SQLite数据库:“无法打开数据库文件”

加密,当未加密(字节组为空)时,此工作:

connection.open(file, "create", false, 1024, bytearray); 

时不加密这仅适用于:

connection.attach("db" + newnum.toString(), file, new Responder(attachEncryptedSuccess, openEncryptedError), bytearray); 

任何帮助表示赞赏。

UPDATE:

刚刚发现一个奇怪的模式在这里:

看来,如果我创建一个加密的数据库,然后创建新的数据库和附加它们,一切工作正常。

创建的文件在卸载后只能使用它们最初创建的命令正确打开。因此,我在使用open()之前创建的加密数据库只能用open()方法打开。所有最初使用attach()创建的加密数据库只能使用attach()打开。首先打开哪个数据库(),哪一个是主数据库也没有关系。它甚至可以不加密。

这是非常奇怪的事情。这是一个错误?或者我在这里做错了什么?

回答

0

我刚才碰到一个问题,听起来好像可能会影响到你。如果你从AIR创建两个数据库,那么这应该可以正常工作,但是如果你使用任何外部工具创建了一个数据库 - 通常大多数工具将默认为PRAGMA ENCODING = UTF8。作为Adobe,AIR做的事情与直接告诉你他们创建他们的UTF16-LE有点不同。

根据sqlite规则,不同的编码类型不能以一种或另一种方式附加。验证的一种方法是使用sqliteman或其他一些sqlite编辑器来验证杂注设置。

对我来说,最后我不得不从一个模板数据库初始化一个种子数据库(空数据库 - 只是头文件被AIR写入)。如果我允许AIR创建我的起始数据库,则它被设置为UTF16,我无法附加UTF8模板。