由于某种原因,以下代码未在我的sqlite数据库中存储任何数据。返回代码是SQLITE_DONE(101),因此它没有给我任何错误消息。多次调用该方法以填充数据库中的几行。谁能看到我要去哪里错了?
- (void)storePersonInDatabase:(Person *)person {
const char *sql = "INSERT INTO PERSON (ID, NAME, NOTES, ADDRESS, PROMOTED, VEGETARIAN) values (?, ?, ?, ?, ?, ?)";
sqlite3_stmt *statement;
// Prepare the data to bind.
NSData *imageData = person.imageData;
NSString *personId = [person.personId stringValue];
NSString *personName = person.name;
NSString *address = person.address;
NSString *notes = person.notes;
NSString *isVegetarian = (person.isVegetarian) ? @"1" : @"0";
NSString *isPromoted = (person.isPromoted) ? @"1" : @"0";
// Prepare the statement.
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
// Bind the parameters (note that these use a 1-based index, not 0).
sqlite3_bind_text(statement, 1, [personId UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [personName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 3, [notes UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 4, [address UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 5, [isPromoted UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 6, [isVegetarian UTF8String], -1, SQLITE_TRANSIENT);
}
// Execute the statement.
int returnCode = sqlite3_step(statement);
if (returnCode != SQLITE_DONE) {
// error handling...
NSLog(@"An error occoured");
}
//这就是我设置数据库的方式
NSString *sqliteDb = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"sqlite"];
if(sqlite3_open([sqliteDb UTF8String], &database) != SQLITE_OK){
NSLog(@"Unable to open database");
}
最佳答案
您将展示如何尝试在应用程序包中打开sqlite文件
您不能写到您的应用程序包
该应用程序包是只读的
您需要将其复制到可以写入的位置。听起来应该去图书馆/文件。
伪代码是:
if(!sqlite_already_in_library) {
[file_manager copyFileFrom:sqlite-in-bundle to:sqlite-in-library_path];
}
关于ios - 无法使用 objective-c 将行插入sqlite数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16604979/