【发布时间】:2011-09-08 00:55:57
【问题描述】:
我正在尝试将数组插入 SQLite 数据库,但在插入要插入的数组变量时遇到了困难。
如何从数组(用户名和全名)中获取变量以插入数据库?
以下是错误消息:
Property 'username' not found on object of type 'NSString *'
Property 'fullName' not found on object of type 'NSString *'
这是我的代码...
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
NSMutableArray *items = result;
sqlite3_stmt *insert_statement;
// prepare the insert statement
const char*sql = "INSERT INTO people (username, fullName) VALUES(?,?)";
sqlite3_prepare_v2(database, sql, -1, &insert_statement, NULL);
// iterate over an array of dictionaries
for (NSString *str in items) {
// NSLog(@"%@",str);
// bind variables
sqlite3_bind_text(insert_statement, 1, [str.username UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(insert_statement, 2, [str.fullName UTF8String], -1, SQLITE_TRANSIENT);
// insert fails
if (sqlite3_step(insert_statement) != SQLITE_DONE) {
NSLog(@"Insert failed: %s", sqlite3_errmsg(database));
}
// reset the statement
sqlite3_reset(insert_statement);
}
// release the statement
sqlite3_finalize(insert_statement);
}`
【问题讨论】:
-
对于它的价值,我强烈建议使用像 FMDB 或 PLDatabase 这样的 Objective-C sqlite 包装器 - 它会让你的生活更轻松
-
首先,您的代码在从数组中获取用户名和全名时存在错误。我们可以看到以后从未使用过的“str”对象。所以修复您的问题代码,我们可以提供帮助)。到目前为止,您在 sqlite 部分的代码看起来不错。插入前是否成功打开数据库?
-
您收到的错误信息是什么?在此处发布项目声明。你如何创建项目数组?您是否收到错误消息“插入失败:”。?如果是,那么您的数据库句柄设置正确。少一件需要担心的事情。
-
@crypticcoder 我已经编辑了问题并包含了上面的错误消息。当我尝试声明变量 (str.username & str.fullName) 时出现问题。
-
是的,凯文,你的问题现在很明显了。您如何期望作为 NSString* 的 str 为您提供 str.username 和 str.fullname。 str 是一个类似于“Kevin”的 NSString。它不是一个可以像 str.fullname 那样使用的结构。这是第 1 部分。您现在应该告诉我您的全名和用户名列表在哪里。你如何构建它们?