我正在使用sqllite3作为本地数据库在objective-c中开发一个iOS应用程序来存储一些数据。我试图使用具有相同数据库路径的多个表,但它不允许我这样做。
例如,如果我尝试在与DB1相同的数据库{db路径}中创建多个表,则不会创建第二个表。
但是如果我尝试在不同的数据库路径中创建不同的表,那么它将正常运行。例如:db路径为表T1的DB1,表T2的DB2等等。
这是我的代码:
创建表的声明:
-(int) createTable
{
sqlite3* db = NULL;
int rc=0;
rc = sqlite3_open_v2([[self getDbFilePath] cStringUsingEncoding:NSUTF8StringEncoding], &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
if (SQLITE_OK != rc)
{
sqlite3_close(db);
NSLog(@"Failed to open db connection");
}
else
{
char * query ="CREATE TABLE IF NOT EXISTS userinfo (id INTEGER PRIMARY KEY AUTOINCREMENT, selfuser TEXT, pic TEXT, name TEXT, gender TEXT, link TEXT )";
char * errMsg;
rc = sqlite3_exec(db, query,NULL,NULL,&errMsg);
if(SQLITE_OK != rc)
{
NSLog(@"Failed to create table rc:%d, msg=%s",rc,errMsg);
}
sqlite3_close(db);
query = "CREATE TABLE IF NOT EXISTS EVENTS (id INTEGER PRIMARY KEY AUTOINCREMENT, id TEXT, info TEXT, date TEXT, no TEXT, name TEXT, time TEXT,userid TEXT, aName TEXT, day TEXT, FirstName TEXT, Pic TEXT,Accepted TEXT,rank TEXT );";
rc = sqlite3_exec(db, query,NULL,NULL,&errMsg);
if(SQLITE_OK != rc)
{
NSLog(@"Failed to create table rc:%d, msg=%s",rc,errMsg);
}
sqlite3_close(db);
}
return rc;
}
非常感谢帮助,在此先感谢!
答案 0 :(得分:0)
SQLite首先不允许在一起运行多个查询语句;它不会尝试运行SQLite查询编辑器。为了运行多个语句,您必须运行可能的执行命令。
尝试这种方式:
const char * query =“CREATE TABLE IF NOT EXISTS \”user \“(\”id \“INTEGER PRIMARY KEY AUTOINCREMENT,\”selfuserid \“TEXT,\”profilepic \“TEXT,\”username \“TEXT ,\“gender \”TEXT,\“profilelink \”TEXT);“
char * errMsg;
rc = sqlite3_exec(db, query,NULL,NULL,&errMsg);
if(SQLITE_OK != rc)
{
NSLog(@"Failed to create table rc:%d, msg=%s",rc,errMsg);
}
query = "CREATE TABLE IF NOT EXISTS \"events\" ( \"id\" INTEGER PRIMARY KEY AUTOINCREMENT, \"id\" TEXT, \"info\" TEXT, \"date\" TEXT, \"players\" TEXT, \"name\" TEXT, \"time\" TEXT, \"userid\" TEXT, \"area\" TEXT, \"day\" TEXT, \"Name\" TEXT, \"Pic\" TEXT, \"total\" TEXT, \"rank\" TEXT );";
rc = sqlite3_exec(db, query,NULL,NULL,&errMsg);
if(SQLITE_OK != rc)
{
NSLog(@"Failed to create table rc:%d, msg=%s",rc,errMsg);
}
sqlite3_close(db);