Ios sqlite3_prepare_v2在iPhone和iPad迷你设备上返回OK,但在普通iPad设备上返回错误

Ios sqlite3_prepare_v2在iPhone和iPad迷你设备上返回OK,但在普通iPad设备上返回错误,ios,sqlite,Ios,Sqlite,我在这段代码中遇到了一个问题:它在iPhone和iPadMini上运行正常,但在大的iPad上发出了错误信息。有什么原因吗 代码: 从LLDB打印: (lldb) print (BOOL)[[NSFileManager defaultManager] isWritableFileAtPath:dbPath] (BOOL) $0 = YES (lldb) print (char *)aQuery (char *) $1 = 0x1f0a1000 "select CodAplicacao, CodL

我在这段代码中遇到了一个问题:它在iPhone和iPadMini上运行正常,但在大的iPad上发出了错误信息。有什么原因吗

代码:

从LLDB打印:

(lldb) print (BOOL)[[NSFileManager defaultManager] isWritableFileAtPath:dbPath]
(BOOL) $0 = YES
(lldb) print (char *)aQuery
(char *) $1 = 0x1f0a1000 "select CodAplicacao, CodLocalidade, Nome, Desc, DataCriacao, Editando from Aplicacao_en"
有什么想法吗

问候

编辑:


它收到错误“数据库磁盘映像格式不正确”。我在internet上找不到如何修复它。

在您修改的问题中,您通知我们,
sqlite3\u errmsg
报告“数据库磁盘映像格式不正确”。这表明您的数据库已损坏。如果您的应用程序在以前某个日期执行某些数据库操作时崩溃,则可能会发生这种情况

您可以通过运行以下SQL来确认这一点:

PRAGMA integrity_check;
如果您想完成该过程,可以将数据库从设备复制回Mac(使用Xcode的Organizer并转到“设备”部分),然后使用您选择的Mac SQLite数据库工具(最坏的情况是,命令行
sqlite3
程序),然后运行上一个
PRAGMA
命令。您甚至可以通过编程方式执行此操作(它返回一个类似于
SELECT
语句的结果集)

事实是,我们相当有信心它会报告问题。最简单的修复方法是重建数据库(例如,删除数据库,如果最初是从捆绑包中复制的,请再次执行该操作;如果是以编程方式创建的,请重复该过程)

如果您决定尝试从数据库恢复用户数据,可以考虑执行中概述的过程。他写道,对于不同的平台,基本流程可能适用于这里。问题是,除非您绝对需要恢复用户数据,否则该过程可能是不必要的

因此,简而言之,该设备上的数据库已损坏,您需要重建它。只需删除应用程序(如果您的数据库位于
Documents
文件夹中,您需要删除应用程序以清空该文件夹),然后重新安装应用程序,您就可以了


将日志语句更改为:

NSLog(@"Error on SQL - (sqlite3_stmt *)executeWithReturn:(char *)aQuery");

这会给你一条信息性的错误信息,告诉你哪里出了问题

通常,这类问题是由特定设备上的数据库版本引起的。它极不可能与设备本身有关


也许你的应用程序在某个时候创建了一个空白数据库,因此找不到该表。如果您使用Xcode的Organizer,请转到“设备”部分,您可以将应用程序文件夹复制到Mac电脑上,然后检查Mac电脑上的数据库,看看是否确认该数据库与您预期的一样。

很好,它帮助我找到了确切的错误,但我仍然无法解决我之前所做的问题,但根据布拉格完整性检查,我的数据库还可以。我也赚了一杯,但没有work@Claudio-迷人。您是说您对该数据库进行了
PRAGMA integrity\u检查(文档
中的那一个,可能不是捆绑包中的原始数据库),但当您执行应用程序执行的SQL时,仍然会出现“数据库磁盘映像格式不正确”错误?虽然我发现这相当令人惊讶,但我认为重建数据库(可能是通过删除应用程序并重新启动)的预测仍然适用。请参阅“数据库磁盘映像格式不正确”的修订答案。
NSLog(@"Error on SQL - (sqlite3_stmt *)executeWithReturn:(char *)aQuery");
NSLog(@"Error on SQL - %s: %s", __FUNCTION__, sqlite3_errmsg(database));