Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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语句插入或替换为我不清楚_Ios_Sqlite - Fatal编程技术网

Ios SQLite语句插入或替换为我不清楚

Ios SQLite语句插入或替换为我不清楚,ios,sqlite,Ios,Sqlite,SQLite语句INSERT或REPLACE-INTO将替换已经存在的行。但当我一次又一次地运行同一语句时,它会不断插入而不是替换 在什么情况下实际发生替换 INSERT OR REPLACE INTO names (rollno, name) VALUES (1, "Adam") 如果要插入的行与表中的另一行具有相同的主键,则会发生替换。 你可能忘了定义主键。哈哈哈,哦,老兄,我从哪里开始 当我经历这个SQL地狱时,我正在诅咒计算机 谢天谢地,我设法让它工作起来了!:D 我从INSERT或R

SQLite语句
INSERT或REPLACE-INTO
将替换已经存在的行。但当我一次又一次地运行同一语句时,它会不断插入而不是替换

在什么情况下实际发生替换

INSERT OR REPLACE INTO names (rollno, name) VALUES (1, "Adam")

如果要插入的行与表中的另一行具有相同的主键,则会发生替换。
你可能忘了定义主键。

哈哈哈,哦,老兄,我从哪里开始

当我经历这个SQL地狱时,我正在诅咒计算机

谢天谢地,我设法让它工作起来了!:D

我从INSERT或REPLACE INTO语句中学到的一件事是,您需要做一件非常关键的事情:

Mark one column of your table as "UNIQUE" during SQL table creation.
下面是一个示例(滚动到右端):

在上面的示例中,我将我的“nodeID”列标记为唯一

一旦这样做,您就可以这样使用它:

-(void)batchSaveEvents:(NSMutableArray *)paramList
{
    @synchronized(self)
    {
        if(self.isConnected == YES)
        {
            const char *sql = "INSERT OR REPLACE INTO Events (nodeID,title,description,eventTime,eventDate,eventLocation,imagePaths,bookingURL) VALUES (?,?,?,?,?,?,?,?);";

            sqlite3_stmt *stmtSave;

            if(sqlite3_prepare(objDatabase, sql, -1, &stmtSave, NULL) != SQLITE_OK)
            {
                //NSLog(@"FAILED %s", sqlite3_errmsg(objDatabase));

                return;
            }

            int listIndex = 0;        

            sqlite3_exec(objDatabase, "BEGIN IMMEDIATE TRANSACTION", 0, 0, 0); // Begin Trasaction

            for(listIndex = 0; listIndex < [paramList count]; listIndex++)
            {
                sqlite3_bind_int(stmtSave, 1, [[(Event *)[paramList objectAtIndex:listIndex] nodeID] intValue]);
                sqlite3_bind_text(stmtSave, 2, [[(Event *)[paramList objectAtIndex:listIndex] title] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 3, [[(Event *)[paramList objectAtIndex:listIndex] description] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 4, [[(Event *)[paramList objectAtIndex:listIndex] eventTime] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 5, [[(Event *)[paramList objectAtIndex:listIndex] eventDate] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 6, [[(Event *)[paramList objectAtIndex:listIndex] eventLocation] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_bind_text(stmtSave, 7, [[(Event *)[paramList objectAtIndex:listIndex] imagePaths] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_bind_text(stmtSave, 8, [[(Event *)[paramList objectAtIndex:listIndex] bookingURL] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_step(stmtSave);
                sqlite3_reset(stmtSave);
            }

            sqlite3_exec(objDatabase, "COMMIT", 0, 0, 0); // Commit Transaction

            sqlite3_finalize(stmtSave);
        }
    }
}
-(void)batchSaveEvents:(NSMutableArray*)参数列表
{
@同步(自)
{
如果(self.isConnected==是)
{
const char*sql=“在事件(节点ID、标题、描述、事件时间、事件日期、事件位置、图像路径、bookingURL)中插入或替换值(?,,,,,,,,,,,;”;
sqlite3_stmt*stmtSave;
if(sqlite3\u prepare(objDatabase,sql,-1,&stmtSave,NULL)!=SQLITE\u OK)
{
//NSLog(@“失败的%s”,sqlite3_errmsg(objDatabase));
返回;
}
int listIndex=0;
sqlite3_exec(objDatabase,“开始即时事务”,0,0,0);//开始事务
对于(listIndex=0;listIndex<[paramList count];listIndex++)
{
sqlite3_bind_int(stmtSave,1,[[(事件*)[paramList objectAtIndex:listIndex]nodeID]intValue]);
sqlite3_bind_text(stmtSave,2,[[(事件*)[paramList objectAtIndex:listIndex]title]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,3,[[(事件*)[paramList objectAtIndex:listIndex]description]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,4,[[(事件*)[paramList objectAtIndex:listIndex]eventTime]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,5,[[(事件*)[paramList objectAtIndex:listIndex]eventDate]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,6,[[(事件*)[paramList objectAtIndex:listIndex]eventLocation]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,7,[[(事件*)[paramList objectAtIndex:listIndex]ImagePath]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(stmtSave,8,[[(事件*)[paramList objectAtIndex:listIndex]bookingURL]UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_步骤(stmtSave);
sqlite3_复位(stmtSave);
}
sqlite3_exec(objDatabase,“COMMIT”,0,0,0);//提交事务
sqlite3_最终确定(stmtSave);
}
}
}

祝你好运,布鲁达。。。或者西斯塔

如果发生
唯一
冲突,将替换某些行中的值,如下所述:

当发生唯一约束冲突时,替换算法 删除导致约束冲突的预先存在的行 在插入或更新当前行和命令之前 继续正常执行。如果非空约束冲突 发生时,替换冲突解决方案将空值替换为 如果该列没有默认值,则输入该列的默认值 值,则使用中止算法。如果存在检查约束 发生冲突时,始终使用替换冲突解决算法 像中止一样工作


我假定您要使
唯一的列是
rollno
。您可以将其设置为表的
主键
,或者只需在其上创建一个

或者有一个主键是自动递增的(
id
或其他什么),您在查询中没有提供。它将获得一个新的
id
,因此它永远不会重复。
-(void)batchSaveEvents:(NSMutableArray *)paramList
{
    @synchronized(self)
    {
        if(self.isConnected == YES)
        {
            const char *sql = "INSERT OR REPLACE INTO Events (nodeID,title,description,eventTime,eventDate,eventLocation,imagePaths,bookingURL) VALUES (?,?,?,?,?,?,?,?);";

            sqlite3_stmt *stmtSave;

            if(sqlite3_prepare(objDatabase, sql, -1, &stmtSave, NULL) != SQLITE_OK)
            {
                //NSLog(@"FAILED %s", sqlite3_errmsg(objDatabase));

                return;
            }

            int listIndex = 0;        

            sqlite3_exec(objDatabase, "BEGIN IMMEDIATE TRANSACTION", 0, 0, 0); // Begin Trasaction

            for(listIndex = 0; listIndex < [paramList count]; listIndex++)
            {
                sqlite3_bind_int(stmtSave, 1, [[(Event *)[paramList objectAtIndex:listIndex] nodeID] intValue]);
                sqlite3_bind_text(stmtSave, 2, [[(Event *)[paramList objectAtIndex:listIndex] title] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 3, [[(Event *)[paramList objectAtIndex:listIndex] description] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 4, [[(Event *)[paramList objectAtIndex:listIndex] eventTime] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 5, [[(Event *)[paramList objectAtIndex:listIndex] eventDate] UTF8String], -1, SQLITE_TRANSIENT);
                sqlite3_bind_text(stmtSave, 6, [[(Event *)[paramList objectAtIndex:listIndex] eventLocation] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_bind_text(stmtSave, 7, [[(Event *)[paramList objectAtIndex:listIndex] imagePaths] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_bind_text(stmtSave, 8, [[(Event *)[paramList objectAtIndex:listIndex] bookingURL] UTF8String], -1, SQLITE_TRANSIENT);

                sqlite3_step(stmtSave);
                sqlite3_reset(stmtSave);
            }

            sqlite3_exec(objDatabase, "COMMIT", 0, 0, 0); // Commit Transaction

            sqlite3_finalize(stmtSave);
        }
    }
}