gpt4 book ai didi

iphone - 写入 SQLite DB 时出错

转载 作者:行者123 更新时间:2023-11-29 05:04:20 25 4
gpt4 key购买 nike

这是我第一次使用 SQL,我以为我做的一切都是正确的,但我不断收到我的表不存在的错误。要创建我所做的表:

CREATE TABLE "Users" ("UserID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "UserName" VARCHAR, "Password" VARCHAR)

所以我有一个名为 Users 的表

要写入表,我称之为:

- (void) addUser {

if(addStmt == nil) {
const char *sql = "insert into Users(UserName, Password) values (?, ?)";
if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}

sqlite3_bind_text(addStmt, 1, [userName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStmt, 2, [password UTF8String], -1, SQLITE_TRANSIENT);

if(SQLITE_DONE != sqlite3_step(addStmt))
NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
//SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
userID = sqlite3_last_insert_rowid(database);

//Reset the add statement.
sqlite3_reset(addStmt);
}

当我触发此操作时,它会关闭应用程序并给出错误创建添加语句时出错。 '没有这样的表:用户'

我花了几天时间才走到这一步,但我不知道从这里到哪里去。我可以做什么来解决这个问题?

编辑:这就是我在 AppDelegate 文件中导入数据库的方式

- (NSString *) getDBPath {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"UserDatabase.sqlite"];
}

最佳答案

我很确定您会收到此错误,因为 sqlite 找不到您的 sqlite 文件,因此它会创建一个空数据库。在空数据库中,它显然找不到您的表,因此会出现错误。

因此正确访问数据库文件应该是您的重点。从您的代码来看,您似乎是从文档目录中读取它的 - 但如果您不将其复制到该目录,则您的数据库文件将无法到达那里。

尝试将实际的 sqlite 文件添加到您的包中。然后,使用此代码到达 sqlite 文件的路径:

databasePath = [[NSBundle mainBundle] pathForResource:@"UserDatabase" ofType:@"sqlite"];

我相信这会解决您的问题。但是您应该注意,如果您想保存对该数据库的更改(我认为您愿意),您不会将该文件复制到文档目录,因为捆绑文件是只读的。在这种情况下,您将在目录路径中搜索 sqlite 文件,如果找不到(可能是第一次使用应用程序) - 将其从 bundle 复制到该目录。

关于iphone - 写入 SQLite DB 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956433/

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