我曾经有这条线很好用:
"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");
}
}
}