gpt4 book ai didi

iphone - sqlite 随机文件已加密或不是数据库

转载 作者:IT王子 更新时间:2023-10-29 06:29:53 35 4
gpt4 key购买 nike

我有一个经常访问 sqlite 数据库的应用程序。它大部分时间都很好用,但偶尔在我的一个数据库函数中失败并返回:

file is encrypted or is not a database

我没有启用任何加密,但我无法确定这是如何发生的。它不是始终可重现的,从崩溃日志来看,它发生在主线程上。

提前致谢。

@synchronized(self) {
sqlite3 *database = mydb;
int result = 0;

static sqlite3_stmt *stmt = nil;
if (stmt == nil) {
const char *sql = "select sum(not isAvailable) from table1 e inner join table2 f on e.key=f.pk where f.pk=? AND e.isDeleting=0;";
if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
}

sqlite3_bind_int(stmt, 1, obj.primaryKey);

if (sqlite3_step(stmt) == SQLITE_ROW) {
int val = sqlite3_column_int(stmt, 0);
result = val;
} else {
[NSException raise:@"SQL Fail" format:@"SQL Failed: %s", sqlite3_errmsg(database)];
}
// Reset the statement for future reuse.
sqlite3_reset(stmt);

return result;
}

最佳答案

要创建新的加密 SQLite 数据库或打开现有的加密 SQLite 数据库,您必须调用函数 sqlite3_key 或在打开数据库后立即执行“pragma key=”命令,然后再执行任何其他数据库操作。我怀疑您试图打开一个现有的数据库,但没有加密 SQLite 数据库,并希望使用上述方法之一对其进行加密。这不起作用,但会导致出现您遇到的错误消息。要加密现有的未加密 SQLite 数据库,您必须使用函数 sqlite3_rekey 或“pragma rekey=”命令。要更改现有加密 SQLite 数据库的加密 key ,您必须打开数据库,然后使用 sqlite3_key(或“pragma key=”),然后应用 sqlite3_rekey(或“pragma rekey=”)。

关于iphone - sqlite 随机文件已加密或不是数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907152/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com