- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 iOS 应用程序中有一个函数,它从数据库中读取一些数据。功能极其简单:
-(void) readCategories {
sqlite3 *database;
if([[NSFileManager defaultManager] fileExistsAtPath:databasePath]){
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
const char *sqlStatement = "SELECT * FROM Categories ORDER BY name COLLATE NOCASE ASC";
sqlite3_stmt *compiledStatement;
int errorCode = sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL);
if(errorCode == SQLITE_OK) {
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
[categories addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]];
}
} else {
NSLog(@"Error reading categories. Code: %d, message: '%s'", errorCode,sqlite3_errmsg(database));
}
sqlite3_finalize(compiledStatement);
sqlite3_close(database);
} else {
NSLog(@"Error opening DB");
}
} else {
NSLog(@"DB does not exist.");
}
}
问题是 errorCode 始终是 SQLITE_ERROR,根据文档是:“SQL 错误或缺少数据库”。给出的消息是:'没有这样的表:类别'
现在,如果我查看计算机上的数据库文件,表格显然就在那里。我也可以对它运行完全相同的查询并且它工作正常。
有没有人知道出了什么问题?
谢谢。
最佳答案
如果您在添加 [[NSFileManager defaultManager] fileExistsAtPath:databasePath]
检查之前运行过此代码,则标准 sqlite3_open
将为您创建一个空白数据库,如果它没有找到一个。所以,
通过模拟器菜单上的“重置内容和设置...”重置您的模拟器。这将清除过去可能创建的任何无关的数据库文件。 (如果您在设备上执行此操作,请删除该应用,然后重新安装。)
如果找不到,sqlite3_open
命令将创建空白数据库。为了安全起见,以后请使用 sqlite3_open_v2
代替,它永远不会创建空白数据库:
if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) {
// handle opening error here
}
通过使用sqlite3_open_v2
,将确保在打开过程中永远不会创建数据库。
如果您仍然遇到问题,请导航至计算机上模拟器的目录,即“~/Library/Application Support/iPhone Simulator”。 (您可能必须通过在终端窗口中键入以下命令来取消隐藏您的库文件夹:
chflags nohidden ~/Library
尝试检查那里的数据库(而不是 Xcode 项目中的版本)并查看数据库是否包含您期望的所有表。
如果完成所有这些操作后,您没有看到数据库被复制到您的模拟器/设备,请确保您已设置目标的构建阶段设置,以便通过“复制捆绑资源”包含数据库".
正如其他人所建议的,每当您遇到 SQLITE_ERROR
时,请务必通过类似 NSLog(@"%s SQLITE_ERROR '%s' (%1d) ", __FUNCTION__, sqlite3_errmsg(数据库), sqlite3_errcode(数据库));
。
关于iOS Sqlite3 SQLITE_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310893/
我在 iOS 应用程序中有一个函数,它从数据库中读取一些数据。功能极其简单: -(void) readCategories { sqlite3 *database; if([[NSFi
如果我想将这些表行放在一起,则会出现以下错误 [SQLITE_ERROR] SQL错误或缺少数据库(输入不完整) 每个人都单独工作。 SELECT x.ActionListId, x.wordinde
我正在尝试使用 Android Room并在关注 this tutorial 之后尝试构建应用程序时出现以下错误: Error:(23, 27) error: 查询有问题:[SQLITE_ERROR]
我正在尝试使用外键创建一个数据库,但我一直收到 no such column: created_at 的错误,即使我没有在代码中的某处使用 created_at 。我想知道为什么以及如何修补这个问题。
我已经为此工作了几个小时,必须让它工作!它阻碍了 iPhone 应用程序的发布...我第一次使用 SQLite。我已遵循所有建议,但我的 sqlite3_prepare_v2 调用每次都会收到 SQL
我正在使用 SQLite3我有一个列,但错误表明未创建列“未定义”。 const SQLite = require('sqlite3').verbose(); const db = new SQLit
我正在编写一个简单的服务器/客户端来跟踪用户登录的次数。用户可以创建一个帐户并将他们的计数设置为 1。后续登录将增加他们在后端 SQLITE3 中的计数数据库。 在下面的示例中,我运行了“添加”函数,
我正在将 Sequelize 与 sqlite 一起使用,当我尝试向表中插入数据时出现错误 Executing (default): INSERT INTO `Users` (`id`,`userna
我正在为我的数据库使用 Sequelize (6.3.0) 和 sqlite3 (4.2.0),我正在尝试定义以下模型: this.define("giveaways", {
这是我的第一个问题。 我正在使用 Room 数据库构建应用程序,并尝试关注 this教程,因为我需要实现多对多关系。 但是,当我尝试构建应用程序时,我不断收到以下错误: 错误:查询有问题:[SQLIT
我正在尝试将 SQLite 与 Java 结合使用,这是第一次将两者结合使用,代码如下: package db; import java.sql.Connection; import java.sql
试图获取一个包含日期和相关注释的表格。我正在发送请求以获取表格和数据,日期 = 我决定的任何内容。 我收到以下错误: E/AndroidRuntime: FATAL EXCEPTION: main
我试图从数据库中获取 rowid,其中有人与刚刚写消息的人具有相同的用户名。当我更改时代码可以工作 WHERE creator` =${member.username} to WHERE match
当我使用flutter并创建表时,出现以下错误! : error DatabaseException(incomplete input (code 1 SQLITE_ERROR): , while c
[SQLITE_ERROR] SQL error or missing database (near "(": syntax error) try { String sql = "SELECT
我已经编写了sequelizer迁移javascript来对表中的现有列进行更改,但是当我运行命令sequelizer db:migrate,它给出了错误 == 20170212050240-alte
我正在尝试使用新的房间库,但出现此错误 Error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing da
我正在使用 sequelize 和 sqlite 在 dicord.j 沙中制作一个不和谐的机器人来制作数据库。它有一个货币系统,当有人在特定 channel 发帖时,我收到了这个错误 Sequeli
我正在尝试在新创建的 SQLite 数据库中创建一个表。由于某种原因,我收到 SQLException: try { logger.debug("Trying to create ta
我有一个报价应用程序,其中使用 SqlLite 数据库来存储报价。当用户打开应用程序时,它将数据从 Assets 复制到数据库。它在所有版本中都工作正常,但在 Android P 中,它在应用程序启动
我是一名优秀的程序员,十分优秀!