我以前有这条线可以正常工作:
"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。所以如果有人可以帮助一点,那就太好了。我的方法的其余部分可能不是最干净的,但我并不真正关心。我只需要创建一次数据库并将其复制到另一个项目以在那里使用它。 如果我有更多的时间和天赋来获取这些东西,我会花更多的时间在它上面,但我根本无法解决问题。如果没有人可以帮助它没问题,那就太好了。
- (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");
}
}
}