gpt4 book ai didi

ios - 如果另一列存在,SQLite 更新列

转载 作者:行者123 更新时间:2023-11-30 17:44:38 25 4
gpt4 key购买 nike

好吧,所以我不确定如何命名这个问题,但我可以解释我的问题是什么。我正在创建一个网络浏览器,并使用 sqlite 数据库来存储历史记录。当页面完成加载我的方法时:

-(void)addHistory:(NSString*)title address:(NSString*)url{
sqlite3_stmt *statement;
const char *dbpath = [_databasePath UTF8String];

if (sqlite3_open(dbpath, &_historyDB) == SQLITE_OK)
{
NSString *updateSQL = [NSString stringWithFormat:
@"UPDATE HISTORY SET title='%@' WHERE url='%@'", title, url];

const char *update_stmt = [updateSQL UTF8String];

sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(_historyDB, update_stmt, -1, &stmt, NULL)==SQLITE_OK) {
NSLog(@"Updated");
}else{
NSString *insertSQL =
[NSString stringWithFormat:
@"INSERT INTO HISTORY (title, url, visits, date, search) VALUES (\"%@\", \"%@\", \"%@\", \"%@\", \"%@\")",
title, url, @"todo", @"todo", [NSString stringWithFormat:@"%@ %@", title, url]];

const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_historyDB, insert_stmt,
-1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
NSLog(@"Added Entry");
} else {
NSLog(@"Coundn't Add Entry");
}
sqlite3_finalize(statement);
}
sqlite3_close(_historyDB);
}
}

我假设如果更新失败(因为表中不存在 url),它将移至 else 语句并添加 key 。这背后的主要思想是更新网页的标题,一旦工作正常,就更新其他字段,例如上次访问的时间、查看的次数等等。

我尝试了多种不同的方法,但似乎无法达到预期的结果。

最佳答案

要执行更新语句,您必须为该语句调用sqlite3_step。要了解更新了多少条记录,请调用sqlite3_changes .

并且您必须处理 sqlite3_prepare_v2 调用返回的任何错误。

并且您必须为 stmt 调用 sqlite3_finalize

任何 URL 或标题中带有 ' 的网站都会损坏您的 SQL 语句;避免SQL injection attacks ,使用parameters .

关于ios - 如果另一列存在,SQLite 更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com