繁体   English   中英

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

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

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

例如,如果我尝试在同一个数据库{DB1的DB路径}中创建多个表,则不会创建第二个表。

但是,如果我尝试在不同的数据库路径中创建不同的表,那么它将正常运行。 ex: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;
    } 

非常感谢您的帮助,在此先感谢您!

SQLite不允许先执行多个查询后再执行语句; 它不会尝试运行SQLite查询编辑器。 为了运行多个语句,您必须运行有时会执行的execute命令。

试试这种方式:

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