0

sqlite3をリンクし、テーブルを作成してデータを挿入しようとしていますが、次のエラーが発生しました:

'NSInternalInconsistencyException', reason: 'Error creating table: near "4": syntax error' *** First throw call stack:(0x15ad022 0x173ecd6 0x1555a48 0xa852cb 0x2bea 0x273a 0x1b5a1e 0x114401 0x114670 0x114836 0x11b72a 0x2415 0xec386 0xed274 0xfc183 0xfcc38 0xf0634 0x1497ef5 0x1581195 0x14e5ff2 0x14e48da 0x14e3d84 0x14e3c9b 0xecc65 0xee626 0x20d2 0x2045 0x1)

コード:

- (void) openDBcreateTable {
if (sqlite3_open([[self filePath]UTF8String], &db) != SQLITE_OK) {
    sqlite3_close(db);
    NSAssert(0, @"Failed to open database");
}
//create table named QUESTIONBANK
NSString *createSQL = @"CREATE TABLE IF NOT EXISTS QUESTIONBANK(ROW INTEGER PRIMARY KEY, QUESTION TEXT, ANSWER TEXT, CHOICE1 TEXT, CHOICE2 TEXT, CHOICE3 TEXT, CHOICE 4 TEXT, USERANSWER TEXT);";

char *errorMsg1;

if (sqlite3_exec(db, [createSQL UTF8String], NULL, NULL, &errorMsg1) != SQLITE_OK) {
    sqlite3_close(db);
    NSAssert(0,@"Error creating table: %s", errorMsg1);
}

for (int k = 1; k < 11; k++) {
    NSMutableArray *questionBlocks = [self pullDataFromSomeWhere];
    NSString *question = [NSString stringWithFormat:[questionBlocks objectAtIndex:0]];
    NSString *answer = [NSString stringWithFormat:[questionBlocks objectAtIndex:1]];
    NSString *choice1 = [NSString stringWithFormat:[questionBlocks objectAtIndex:2]];
    NSString *choice2 = [NSString stringWithFormat:[questionBlocks objectAtIndex:3]];
    NSString *choice3 = [NSString stringWithFormat:[questionBlocks objectAtIndex:4]];
    NSString *choice4 = [NSString stringWithFormat:[questionBlocks objectAtIndex:5]];

    char *update = "INSERT OR REPLACE INTO QUESTIONBANK(ROW,QUESTION,ANSWER,CHOICE1,CHOICE2,CHOICE3,CHOICE4)VALUES(?,?,?,?,?,?,?);";


    sqlite3_stmt *stmt;

    if (sqlite3_prepare_v2(db, update, -1, &stmt, nil) == SQLITE_OK) {
        sqlite3_bind_int(stmt, 1, k);
        sqlite3_bind_text(stmt, 2, [question UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 3, [answer UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 4, [choice1 UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 5, [choice2 UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 6, [choice3 UTF8String], -1, NULL);
        sqlite3_bind_text(stmt, 7, [choice4 UTF8String], -1, NULL);

    }
    if (sqlite3_step(stmt) != SQLITE_DONE) {
        NSAssert(0,@"Error updating table");
    }
    sqlite3_finalize(stmt);
}
sqlite3_close(db);}

私はまだsqlite3に慣れていないので、他のエラーがあることも確信しています。これを行っている間、sqlite3で使用できる「VARCHAR」、「BLOB」など(MySQLなど)はありますか?

4

2 に答える 2

0

createtableステートメントの偽の「4」を削除します。

... CHOICE 4 TEXT ...

する必要があります:

... CHOICE TEXT ...

エラーメッセージはかなり自明です。

于 2012-04-29T14:31:31.827 に答える
0

データ型の質問に関しては、 SQLiteのドキュメントがこれに明確に対応していると思います。結論として、SQLiteのデータ型は限られており、データ列の型を強制しません(したがって、任意のデータ型を任意の列に格納できます)。明示的なVARCHARデータ型はありません。

于 2012-04-29T15:28:13.417 に答える