尝试创buildsqlite数据库时出现错误'无法创build表'IOS7
嗨在我的应用程序我试图创build一个本地数据库来存储主键自动增量值的值,但它的错误如。
2014-06-19 14:34:28.499 brt[2363:80b] *** Assertion failure in -[listviewpoliticalViewController createTable:withField1:withField2:withField3:withField4:], /Users/madhavadudipalli/Desktop/ ios projects/brt/brt/listviewpoliticalViewController.m:37 2014-06-19 14:34:28.501 brt[2363:80b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not create table'
我得到像上面的错误,请告诉我如何解决这个问题。
我的数据库在.h文件中创build代码。
-(NSString *) filePath; -(void)openDB; -(void) createTable: (NSString *) tableName withField1:(NSString *) field1 withField2:(NSString *) field2 withField3:(NSString *) field3 withField4:(NSString *) field4;
.m文件中的数据库代码。
-(void) createTable: (NSString *) tableName withField1:(NSString *) field1 withField2:(NSString *) field2 withField3:(NSString *) field3 withField4:(NSString *) field4; { char *err; NSString *sql =[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ( Id integer PRIMARY KEY,'%@' TEXT, '%@' TEXT, '%@' TEXT);",tableName,field1,field2,field3]; if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) { sqlite3_close(db); NSAssert(0, @"Could not create table"); }else{ NSLog(@"Table Created"); } } -(NSString *) filePath{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); return [[paths objectAtIndex:0] stringByAppendingPathComponent:@"bp.sqlite"]; } -(void)openDB{ if (sqlite3_open([[self filePath] UTF8String], &db)!=SQLITE_OK) { sqlite3_close(db); NSAssert(0, @"Database failed to open"); }else{ NSLog(@"database opened"); } }
我已经用上面的代码在sqlite
创build数据库,请告诉我在上面的代码中,我在哪里做错了如何解决这个问题我已经在这里长时间被击中请帮助我。
谢谢。
您在格式化SQL语句时遇到一些错误。 你不应该使用' %@ ' 。 只要使用%@
这是一个工作示例:
@interface SQLiteManager () @property (strong, nonatomic) NSString *databasePath; @property (nonatomic) sqlite3 *myDataBase; @end @implementation SQLiteManager - (void)createDatabase { // get the path to our data base NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *doctumentsDirectory = [directories lastObject]; self.databasePath = [[NSString alloc] initWithString:[doctumentsDirectory stringByAppendingPathComponent:@"/yourDataBaseName.db"]]; NSFileManager *fileManager = [NSFileManager defaultManager]; // create DB if it does not already exists if (![fileManager fileExistsAtPath:self.databasePath]) { const char *dbPath = [self.databasePath UTF8String]; if (sqlite3_open(dbPath, &_myDataBase) == SQLITE_OK) { char *errorMsg; const char *sql_statement = "CREATE TABLE IF NOT EXISTS SOME_TABLE_NAME (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIRST_NAME TEXT, LAST_NAME TEXT)"; if (sqlite3_exec(_myDataBase, sql_statement, NULL, NULL, &errorMsg) != SQLITE_OK) { [self errorCreatingTable:[NSString stringWithFormat:@"failed creating table. ERROR:%s", errorMsg]]; } sqlite3_close(_myDataBase); } else { [self errorCreatingTable:@"failed openning / creating table"]; } } } - (void)errorCreatingTable:(NSString *)errorMsg { NSLog(@"%@", errorMsg); }