【发布时间】:2011-12-07 21:41:56
【问题描述】:
我正在尝试从文本文件中预填充我的 SQlite 表 - 虽然编译正常,但不会插入任何行:
NSLog(@"Insert Table for English");
char *errorMsg;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath ] stringByAppendingPathComponent:@"english.sql"];
NSLog(@"DefaultPath: %@", defaultDBPath);
NSString *sql = [[[NSString alloc] initWithContentsOfFile:defaultDBPath
encoding:NSUTF8StringEncoding
error:NULL] autorelease];
if (sqlite3_exec(database,[sql UTF8String],NULL,NULL, &errorMsg) != SQLITE_OK) {
NSAssert1(0, @"Error loading update file: %s", errorMsg);
}
NSLog(@"I should have written something");
这是我的文本文件的样子:
BEGIN TRANSACTION;
INSERT INTO PARTNER(branche) VALUES('Choose music for the Ceremony');
COMMIT;
我在这里创建数据库:
-(void)createDatabase {
NSUserDefaults *userSETTINGS = [NSUserDefaults standardUserDefaults];
NSLog(@"HUHU - schau ma mal: Database = %d", [userSETTINGS integerForKey:@"Database"]);
if ([userSETTINGS integerForKey:@"Database"] == 0) {
if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
NSAssert(0, @"Failed to open database");
}
char *errorMsg;
//sqlite3_stmt *statement;
NSString *createSQL = @"CREATE TABLE IF NOT EXISTS PARTNER (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, branche TEXT, company TEXT, name TEXT, phone TEXT, email TEXT, price INT, notes TEXT, done TEXT);";
if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
sqlite3_close(database);
NSAssert1(0, @"Error createing table: %s", errorMsg);
}
NSUserDefaults *userSETTINGS = [NSUserDefaults standardUserDefaults];
[userSETTINGS setInteger:1 forKey:@"Database"];
NSLog(@"HUHU - schau ma mal: Database = %d", [userSETTINGS integerForKey:@"Database"]);
[self fillDatabase];
} else {
NSLog(@"Database wurde schon angelegt");
[self readDatabase];
}
}
日志文件告诉我,defaultDBPath 是:
默认路径:/Users/sl/Library/Application Support/iPhone Simulator/User/Applications/0BE2EDC6-F070-43BE-9666-310257B495B9/WeddingPlanner.app/english.sql
我错过了什么?数据库是正确的,路径是好的,但什么都不会写...
感谢您的回答、帮助、建议... :-)
BR,
斯蒂芬
再次感谢您的持续帮助...
我做了如下改动:
if (sqlite3_open_v2([[self dataFilePath] UTF8String], &database, SQLITE_OPEN_READWRITE, nil) != SQLITE_OK) {
sqlite3_close(database);
NSAssert(0, @"Failed to open database");
}
NSLog(@"Insert Table for English");
char *errorMsg;
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath ] stringByAppendingPathComponent:@"e.sqlite"];
NSLog(@"DefaultPath: %@", defaultDBPath);
NSString *sql = [[[NSString alloc] initWithContentsOfFile:defaultDBPath
encoding:NSUTF8StringEncoding
error:NULL] autorelease];
if (sqlite3_exec(database,[sql UTF8String],NULL,NULL, &errorMsg) != SQLITE_OK) {
NSAssert1(0, @"Error loading update file: %s", errorMsg);
}
NSLog(@"Hier hätte ich schreiben sollen");
我的日志看起来像:
2010-02-21 20:37:41.666 婚礼策划师[61189:207] 开始时无 2010-02-21 20:37:41.668 婚礼策划师[61189:207] HUHU - schau ma mal: 数据库 = 1 2010-02-21 20:37:41.669 婚礼策划师[61189:207] 数据库 wurde schon angelegt 2010-02-21 20:37:41.670 婚礼策划师[61189:207] 缩写:从合作伙伴中选择总和(价格) 2010-02-21 20:37:41.671 婚礼策划师[61189:207] 开始时无 2010-02-21 20:37:41.672 婚礼策划师[61189:207] 死党 语言:(空)2010-02-21 20:37:41.682 婚礼策划师[61189:207] Abfrage:从合作伙伴 2010-02-21 20:37:41.683 中选择总和(价格) 婚礼策划师[61189:207] 2010-02-21 20:37:41.685 开始时为零 婚礼策划师[61189:207] HUHU - schau ma mal: (null) 2010-02-21 20:37:41.685 婚礼策划师[61189:207] 计算日期差异 2010-02-21 20:37:41.691 婚礼策划师[61189:207] Das Datum DAY = -3338 wait_fences:未能收到回复:10004003 2010-02-21 20:37:56.597 WeddingPlanner[61189:207] 英语 2010-02-21 20:37:56.599 婚礼策划师[61189:207] 语言:EN 2010-02-21 20:37:56.600 婚礼策划师[61189:207] 插入英文表格 2010-02-21 20:37:56.602 婚礼策划师 [61189:207] 默认路径: /用户/sl/库/应用程序支持/iPhone 模拟器/用户/应用程序/D79C5BB0-B4E1-4AD7-8B9B-E4493D82F64D/WeddingPlanner.app/e.sqlite
一切看起来都很好 - 将创建数据库,可以打开数据库(因为没有失败问题),我能够将(查看 GUI)数据插入到“合作伙伴”表中,但我无法插入通过文件获取数据...
【问题讨论】:
标签: objective-c iphone sqlite