sqlite3_prepare_open和sqlite3_finalize是对应的

事情是这样的,就是写了点sqlite3的代码,包括create table和drop table

例如

void dropTabele(sqlite3 *db_handler, sqlite3_stmt* stmt, const std::string& table_name)
{
    std::string drop_sql = "DROP TABLE IF EXISTS " + table_name;
    int drop_tatus = sqlite3_prepare_v2(db_handler, drop_sql.c_str(), -1, &stmt, nullptr);
    if (drop_tatus != SQLITE_OK) {
        log.....
    } else {
        drop_tatus = sqlite3_step(stmt);
        if (drop_tatus != SQLITE_DONE) {
            log....
        }
    }
    sqlite3_reset(stmt);
}

本想着在外层定义sqlite3_stmt指针,然后传给dropTable,然后内部调用sqlite3_reset重置,外层再调用sqlite3_finalize释放。但是sqlite3_finalize会崩溃。

后来发现sqlite3_prepare_open和sqlite3_finalize是一一对应的。

需要改成

void dropTabele(sqlite3 *db_handler, const std::string& table_name)
{
    sqlite3_stmt* stmt;
    std::string drop_sql = "DROP TABLE IF EXISTS " + table_name;
    int drop_tatus = sqlite3_prepare_v2(db_handler, drop_sql.c_str(), -1, &stmt, nullptr);
    if (drop_tatus != SQLITE_OK) {
        log.....
    } else {
        drop_tatus = sqlite3_step(stmt);
        if (drop_tatus != SQLITE_DONE) {
            log....
        }
    }
    sqlite3_finalize(stmt);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用sqlite3_prepare_v2函数来查询数据,需要经过以下步骤: 1. 打开一个数据库连接,使用sqlite3_open函数来打开数据库文件。 2. 使用sqlite3_prepare_v2函数来创建一个sqlite3_stmt对象,并将SQL查询语句传递给该函数。例如,如果要查询表中所有的行,可以使用以下代码: sqlite3_stmt *stmt; const char *sql = "SELECT * FROM 表名"; int rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 其中,db是sqlite3_open函数打开数据库文件后返回的sqlite3对象。 3. 绑定参数(如果需要)。例如,如果查询语句中包含一个参数,可以使用sqlite3_bind_xxx函数来将该参数的值绑定到sqlite3_stmt对象上。例如: sqlite3_bind_int(stmt, 1, 100); // 将整型值100绑定到第一个参数上 4. 执行查询语句,使用sqlite3_step函数来执行查询操作,该函数返回SQLITE_ROW表示查询结果有一行数据,需要使用sqlite3_column_xxx函数来获取每一列的值。如果查询结果为空,则返回SQLITE_DONE。例如: while (sqlite3_step(stmt) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, 0); const unsigned char *name = sqlite3_column_text(stmt, 1); double score = sqlite3_column_double(stmt, 2); // 使用获取到的值进行后续处理 } 5. 关闭sqlite3_stmt对象,使用sqlite3_finalize函数来关闭sqlite3_stmt对象并释放资源。 6. 关闭数据库连接,使用sqlite3_close函数来关闭数据库连接。 注意,以上步骤只是一个基本的查询流程,具体操作需要根据实际需求进行调整。同时,也需要注意处理sqlite3_prepare_v2和sqlite3_step函数的返回值,以避免出现错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值