0

ObjectiveCコードとSQ​​Liteの実装に問題があります。エラー行はNSAssetif句にあり、コメントアウトされています。コードは次のとおりです。

-(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 EXIST '%@' ( '%@ "
                    "TEXT PRIMARY KEY, '%@' INTEGER, '%@' INTEGER, '%@' TEXT);",
                    tableName, field1, field2, field3, field4];

    if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err)
        != SQLITE_OK) {
        sqlite3_close(db);
     //   NSAssert(0, @"Could not create table");
    }else{
        NSLog(@"table create");
    }
}

-(NSString *) filePath{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    return [[paths objectAtIndex:0]stringByAppendingPathComponent:@"bp.sql"];
}

-(void)openDB{
    if (sqlite3_open([[self filePath] UTF8String], &db) !=SQLITE_OK){
        sqlite3_close(db);
        NSAssert(0, @"Database failed to open");
    }else{
        NSLog(@"Database open");
    }
}

そしてエラーメッセージ:

*** Assertion failure in -[MainViewController createTable:withField1:withField2:withField3:withField4:], /Users/Modius/X-Code 4/BPApp/BPApp/MainViewController.m:32
2013-01-18 11:38:07.772 BPApp[58857:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not create table'
*** First throw call stack:
(0x2090012 0x119de7e 0x208fe78 0xc33f35 0x20a0 0x243a 0x1c6817 0x1c6882 0x115a25 0x115dbf 0x115f55 0x11ef67 0xe2fcc 0xe3fab 0xf5315 0xf624b 0xe7cf8 0x1febdf9 0x2013f3f 0x201396f 0x2036734 0x2035f44 0x2035e1b 0xe37da 0xe565c 0x1c3d 0x1b65 0x1)
libc++abi.dylib: terminate called throwing an exception

更新:ここに完全なログ出力があります:

2013-01-18 12:18:14.456 BPApp[59854:c07] Database open
2013-01-18 12:18:14.458 BPApp[59854:c07] *** Assertion failure in -[MainViewController createTable:withField1:withField2:withField3:withField4:], /Users/Modius/X-Code 4/BPApp/BPApp/MainViewController.m:31
2013-01-18 12:18:14.460 BPApp[59854:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not create table'
*** First throw call stack:
(0x2090012 0x119de7e 0x208fe78 0xc33f35 0x20a0 0x243a 0x1c6817 0x1c6882 0x115a25 0x115dbf 0x115f55 0x11ef67 0xe2fcc 0xe3fab 0xf5315 0xf624b 0xe7cf8 0x1febdf9 0x1febad0 0x2005bf5 0x2005962 0x2036bb6 0x2035f44 0x2035e1b 0xe37da 0xe565c 0x1c3d 0x1b65 0x1)
libc++abi.dylib: terminate called throwing an exception
(lldb) 
4

3 に答える 3

1
NSString *sql= [NSString stringWithFormat:
                @"CREATE TABLE IF NOT EXIST '%@' ( '%@ "
                "TEXT PRIMARY KEY, '%@' INTEGER, '%@' INTEGER, '%@' TEXT);",
                tableName, field1, field2, field3, field4];

最初のフィールド名の後に一重引用符がありません。

(SQLでは、テーブル/フィールド名は二重引用符で囲む必要があることに注意してください。SQLiteは、MySQLとの互換性のためにのみ一重引用符を受け入れます。)

于 2013-01-18T10:46:38.730 に答える
0

次のようにフォーマットしてみてください。 @"CREATE TABLE IF NOT EXIST '%@' ( '%@' TEXT PRIMARY KEY, '%@' INTEGER, '%@' INTEGER, '%@' TEXT);"

于 2013-01-18T10:51:21.000 に答える
0

EXISTではなくEXISTSを読み取るようにSQLステートメントを修正します。

于 2013-09-29T16:50:29.713 に答える