gpt4 book ai didi

sql - IOS sqlite更新查询问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:54:12 27 4
gpt4 key购买 nike

我是 IOS 编程的新手,所以我不太确定如何最好地解决这个问题。

我有一个显示在 TableView 上的事件数据库,当您选择其中一项时,它会显示详细信息以及将其另存为“收藏夹”的选项,这只会更新数据库中的列并设置它为 1。

我有第二个 TableView ,用于查找所有将“收藏夹”设置为 1 的实例。

我遇到的问题是,我只是想出了如何让“updateItem”数据库查询在您选择的项目路径之外运行。由于每个 TableView 在不同路径上显示相同的项目,因此当您使用“收藏夹” TableView 时,“updateItem”查询正在更新数据库中不正确的项目。

我了解到在 UpdateItemAtID 方法中,它使用的是 aryDatabase,而收藏夹查询使用的是 aryDatabaseFav。我必须创建第二个数组来绕过收藏夹 TableView ,也许有更好的方法可以只使用原始 aryDatabase 数组而不是使用 2 个不同的数组来获得我想要的一切。

这是我为两个选择语句以及更新查询编写的代码,有没有更好的方法可以解决我需要项目路径的问题?

-(void)readItems {

if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}

// loop reading items from list
[aryDatabase removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabase addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}

-(void)readFavItems {
if (!database) return; // earlier problems
if (!selStmt)
{
const char *sql = "SELECT * FROM Events WHERE mySchedule = 1;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}

// loop reading items from list
[aryDatabaseFav removeAllObjects]; // clear list for rebuild
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
//bindings omitted
[aryDatabaseFav addObject:se]; // add to list
[se release]; // free item
}
sqlite3_reset(selStmt); // reset (unbind) statement
selStmt = nil;}

-(void)updateItemAtID:(NSIndexPath *)path {
singleEvent *i = (singleEvent *)[aryDatabase objectAtIndex:path.row];
int ret;

const char *sql = "UPDATE events SET mySchedule = ? WHERE _id = ?;";

if (!updStmt)
{ // build update statement
if ((ret=sqlite3_prepare_v2(database, sql, -1, &updStmt, NULL))!=SQLITE_OK)
{
NSAssert1(0, @"Error building statement to update items [%s]", sqlite3_errmsg(database));
}
}
// bind values to statement
NSInteger m = i.intId;
sqlite3_bind_int(updStmt, 1, m);
NSInteger p = i.intPk;
sqlite3_bind_int(updStmt, 2, p);

if ((ret=sqlite3_step(updStmt)) != SQLITE_DONE)
{
NSAssert1(0, @"Error updating values [%s]", sqlite3_errmsg(database));
}
sqlite3_reset(updStmt);
}

最佳答案

我已经更新了代码并在 sqlite3_bind_text 上得到了 result=0。是否意味着更新没有错误或根本没有更新记录?不确定此时还能做什么...

   BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bh.sqlite"];
success = [fileManager fileExistsAtPath:writableDBPath];

NSLog(writableDBPath);

if(success)
{
const char *dbPath= [writableDBPath UTF8String];

//[G msgBox:writableDBPath title:@""];

//const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
sqlite3 *contactDB = NULL;

if (sqlite3_open(dbPath, &contactDB) == SQLITE_OK)
{

NSString *updateSQL = @"UPDATE account SET name = ? ";
const char *update_stmt = [updateSQL UTF8String];


int e = sqlite3_prepare_v2(contactDB, update_stmt, -1, &statement, nil);
if(e != SQLITE_OK) {
NSLog(@"Problem with updateEntryWithUniqueID");
NSLog(@"Error Code: %d, message '%s'", e, sqlite3_errmsg(contactDB));

return;
}else{
NSLog(@"Updated");
[G setNickname:thisNickname];
}

int result=sqlite3_bind_text(statement, 1, [thisNickname UTF8String], -1, SQLITE_TRANSIENT);
NSLog(@"bind result= %i", result);


if(sqlite3_step(statement) != SQLITE_DONE) {
NSLog(@"Problems updating");
}

/* Finished */
sqlite3_finalize(statement);
}else
{
NSLog(@"Can not open DB.");
}

}else{
NSLog(@"path not exsist"); }

关于sql - IOS sqlite更新查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8673535/

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