首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从sqlite3数据库中删除某些行

从sqlite3数据库中删除某些行
EN

Stack Overflow用户
提问于 2011-11-28 05:52:41
回答 1查看 503关注 0票数 0

我正在尝试从我的数据库中删除创建行。但是它不能这样做,我有日期特定的内容,这些内容在我的表中重复,所以我想删除特定日期的条目,并在每次建立连接时添加它们

我的代码是:

代码语言:javascript
运行
复制
static sqlite3 *database = nil;
static sqlite3_stmt *deleteStmt = nil;

- (NSString *)dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(
                                                         NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"person.sqlite3"];
}


    NSDate *today = [NSDate date];
    NSLog(@"%@", today);
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM/dd/yy"];

    if (sqlite3_open([[self dataFilePath] UTF8String], &database)
        != SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }


    NSString * dateString = [dateFormat stringFromDate:today];
    if(deleteStmt == nil)
    {
        const char *sql = "delete from SHOPPER where DATE = ?";
        if(sqlite3_prepare_v2(database, sql, -1, &deleteStmt, NULL) != SQLITE_OK)
            NSAssert1(0, @"Error while creating delete statement. '%s'", sqlite3_errmsg(database));
    }

    //When binding parameters, index starts from 1 and not zero.
    sqlite3_bind_text(deleteStmt, 3, [dateString UTF8String],-1, NULL);

    if (SQLITE_DONE != sqlite3_step(deleteStmt))
        NSAssert1(0, @"Error while deleting. '%s'", sqlite3_errmsg(database));

    sqlite3_reset(deleteStmt);

    sqlite3_close(database);
EN

Stack Overflow用户

发布于 2011-11-28 08:33:07

sqlite3_bind_text的第二个参数应该是1,而不是3。这意味着索引“?”字符,并且因为只有一个'?‘在delete语句中,它必须是1。

代码语言:javascript
运行
复制
//When binding parameters, index starts from 1 and not zero.
sqlite3_bind_text(deleteStmt, 1, [dateString UTF8String], -1, NULL);

那么,为什么要将deleteStmt声明为静态,并且只创建一次呢?我认为它应该是为开放数据库创建的,因为你每次都会打开和关闭数据库,所以你也应该每次都创建(并最终确定,而不是重置) deleteStmt。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8289385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档