0

私は正常に動作するこの行を持っていました:

"CREATE TABLE IF NOT EXISTS Paths (ID INTEGER PRIMARY KEY AUTOINCREMENT, START INTEGER, END INTEGER, DISTANCE REAL, NODES TEXT)";

ただし、インデックスはありません。開始と終了にインデックスを付けたいと思います。(ルートのノードを取得するのはパスファインダーからです)。

私が今試しているのは:

            const char *sql_stmt =
        "CREATE TABLE IF NOT EXISTS Paths (ID INTEGER PRIMARY KEY AUTOINCREMENT, START INTEGER, END INTEGER, DISTANCE REAL, NODES TEXT) CREATE INDEX `START_INDEX` ON `Paths` (`START` ASC) CREATE INDEX `END_INDEX` ON `Paths` (`END` ASC)";

しかし、これは失敗します。

理由: "CREATE" 付近: 構文エラー

私はmysqlで少し経験がありますが、sqliteでは経験がありません。これは学校のプロジェクトのためのもので、その後は sqlite に二度と触れないかもしれません。ですから、誰かが少しでも役に立てば、それは本当に素晴らしいことです。私の方法の残りの部分はおそらく最もきれいではありませんが、私はそれについてあまり気にしません。データベースを一度作成し、それを別のプロジェクトにコピーしてそこで使用するだけです。そういうものを拾うための時間と才能がもう少しあれば、もっと時間を費やすだろうが、ATM はできない。誰も助けてくれなくても問題ありません。それは本当に素晴らしいことです。

- (void) createDataBase {

    NSString *docsDir;
    NSArray *dirPaths;

    // Get the documents directory
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = dirPaths[0];

    // Build the path to the database file
    _databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"paths.db"]];

    NSLog(@"databasePath: %@", _databasePath);

    //NSFileManager *filemgr = [NSFileManager defaultManager];

    //if ([filemgr fileExistsAtPath: _databasePath] == NO) {
    if (YES == YES) {

        const char *dbpath = [_databasePath UTF8String];

        if(sqlite3_open(dbpath, &_pathDB) == SQLITE_OK) {
            char *errMsg;
            const char *sql_stmt =
            "CREATE TABLE IF NOT EXISTS Paths (ID INTEGER PRIMARY KEY AUTOINCREMENT, START INTEGER, END INTEGER, DISTANCE REAL, NODES TEXT) CREATE INDEX `START_INDEX` ON `Paths` (`START` ASC) CREATE INDEX `END_INDEX` ON `Paths` (`END` ASC)";


            if (sqlite3_exec(_pathDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
            {
                //_status.text = @"Failed to create table";
                NSLog(@"Failed to create table");
                NSLog(@"reason: %s", sqlite3_errmsg(_pathDB));

            }
            sqlite3_close(_pathDB);
        } else {
            // _status.text = @"Failed to open/create database";
            NSLog(@"Failed to open/create database");
        }
    }

}
4

0 に答える 0