Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中使用SQLite使用相同的db路径创建多个表?_Ios_Objective C_Database_Sqlite_Local Database - Fatal编程技术网

如何在iOS中使用SQLite使用相同的db路径创建多个表?

如何在iOS中使用SQLite使用相同的db路径创建多个表?,ios,objective-c,database,sqlite,local-database,Ios,Objective C,Database,Sqlite,Local Database,我正在objective-c中开发一个iOS应用程序,使用sqllite3作为本地数据库来存储一些数据。我试图使用具有相同db路径的多个表,但它不允许我这样做 例如,如果我尝试在与DB1}相同的DB{DB path中创建多个表,则不会创建第二个表 但如果我尝试在不同的db路径中创建不同的表,那么它的功能正常。例如:DBPATH作为表T1的DB1,表T2的DB2,等等 这是我的密码: 要创建表的语句: -(int) createTable { sqlite3* db = NULL;

我正在objective-c中开发一个iOS应用程序,使用sqllite3作为本地数据库来存储一些数据。我试图使用具有相同db路径的多个表,但它不允许我这样做

例如,如果我尝试在与DB1}相同的DB{DB path中创建多个表,则不会创建第二个表

但如果我尝试在不同的db路径中创建不同的表,那么它的功能正常。例如:DBPATH作为表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;
    } 

非常感谢您的帮助,提前谢谢

SQLite不允许在第一个查询语句之后运行多个查询语句;它不会尝试运行SQLite查询编辑器。为了运行多条语句,您必须运行可能会重复多次的execute命令

试着这样做:

const char*query=“如果不存在则创建表\“user\”(\“id\”整数主键自动递增、\“selfuserid\”文本、\“profilepic\”文本、\“username\”文本、\“gender\”文本、\“profilelink\”文本)


感谢您的快速回复,我会在应用此功能后更新您。请尝试。我还没有编译我刚才在Phone上键入的代码。您在第一个语句或第二个语句后出现错误。在第一个表创建中,您可以编辑我的代码吗。sqlite3*db=NULL;int rc=0;rc=sqlite3_open_v2([[self-getDbFilePath]cStringUsingEncoding:NSUTF8StringEncoding],&db,SQLITE_open_READWRITE | SQLITE_open_CREATE,NULL);如果(SQLITE_OK!=rc){sqlite3_close(db);NSLog(@“未能打开db连接”);}在执行第一条语句之前,您是否编写了这些行。
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);