嗨,在我的应用程序中我正在尝试创建一个本地数据库来存储具有主键自动增量值的值,但它给出的错误就像。
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文件中创建代码。
-(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
中创建数据库请告诉我在上面的代码中我做错了如何解决这个问题我已经在这里打了很长时间请帮助我。
感谢。
答案 0 :(得分:5)
格式化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);
}