简体   繁体   English

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

[英]How to use same db path to create multiple tables using SQLite in iOS?

I am developing an iOS application in objective-c using sqllite3 as local DB to store some data. 我正在使用Objective-C开发一个iOS应用程序,使用sqllite3作为本地数据库来存储一些数据。 I am trying to use multiple tables with the same db path, but it does not allow me to do so. 我正在尝试使用具有相同数据库路径的多个表,但这不允许我这样做。

For instance, If I try to create multiple tables in same DB {db path as DB1} then the second table is not created. 例如,如果我尝试在同一个数据库{DB1的DB路径}中创建多个表,则不会创建第二个表。

But if I try to create different tables in different db paths, then it functions normally. 但是,如果我尝试在不同的数据库路径中创建不同的表,那么它将正常运行。 ex : db path as DB1 for table T1 , DB2 for table T2 and so on. ex:db路径,如表T1的DB1,表T2的DB2,依此类推。

Here is my code: 这是我的代码:

Statement to create table : 创建表的语句:

  -(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;
    } 

Help is much appreciated, thanks in advance! 非常感谢您的帮助,在此先感谢您!

SQLite doesn't allow to run multiple query together statement after first; SQLite不允许先执行多个查询后再执行语句; it doesn't try running SQLite query editor. 它不会尝试运行SQLite查询编辑器。 In order to run more than one statement you have to run execute command that may times. 为了运行多个语句,您必须运行有时会执行的execute命令。

Try this way: 试试这种方式:

const char * query ="CREATE TABLE IF NOT EXISTS \\"user\\" ( \\"id\\" INTEGER PRIMARY KEY AUTOINCREMENT, \\"selfuserid\\" TEXT, \\"profilepic\\" TEXT, \\"username \\" TEXT, \\"gender\\" TEXT, \\"profilelink\\" TEXT );" const char * query =“如果不存在则创建表\\” user \\“(\\” id \\“整数主键自动递增,\\” selfuserid \\“ TEXT,\\” profilepic \\“ TEXT,\\”用户名\\“ TEXT,\\”性别\\“ 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM