SQLite——step操作

举报
小糖饼最甜呀 发表于 2022/04/13 21:55:35 2022/04/13
【摘要】 本文使用C++开发语言,对SQLite数据库进行分步操作。SQLite数据库分步操作如下:打开数据库解析SQL语句,编译生成 sqlite3_stmt类型的对象执行实例化为sqlite3_stmt类型的SQL语句释放sqlite3_stmt对象关闭数据库;之前已经介绍了sqlite3_exec()用法,这里介绍sqlite3_step()用法。其实sqlite3_exec()就是把sqlit...

本文使用C++开发语言,对SQLite数据库进行分步操作。
SQLite数据库分步操作如下:

  • 打开数据库
  • 解析SQL语句,编译生成 sqlite3_stmt类型的对象
  • 执行实例化为sqlite3_stmt类型的SQL语句
  • 释放sqlite3_stmt对象
  • 关闭数据库;

之前已经介绍了sqlite3_exec()用法,这里介绍sqlite3_step()用法。
其实sqlite3_exec()就是把sqlite3_perpare(),sqlite3_step(),qlite3_finalize()这三个函数结合在了一起,且提供回调函数用于处理结果。

打开数据库、关闭数据库与文章【SQLite——exec操作】的对应内容一致,已经看过的可以忽略。

打开数据库

sqlite3_open函数
函数作用: 用于打开指定数据库文件名的数据库。如果数据库文件不存在,则会在指定路径下创建。
函数原型:

///
/// \brief sqlite3_open
/// \param filename 数据库文件名称
/// \param ppDb OUT:SQLite数据库句柄
/// \return 
///
int sqlite3_open(const char *filename, sqlite3 **ppDb);

注:如果文件名(参数filename)是":memory:",则为该连接创建一个私有的临时内存数据库。

返回值: 返回值为int,具体参照“Result Codes”集合。
成功:SQLITE_OK,即0;
失败:不等于SQLITE_OK,即非零。

实例化为sqlite3_stmt类型

sqlite3_prepare函数
函数作用: sqlite3_prepare将sql语句转换成sqlite3_stmt类型的句柄,用于执行。
函数原型:

///
/// \brief sqlite3_prepare
/// \param db 数据库句柄
/// \param zSql SQL语句
/// \param nByte 字节数
/// \param ppStmt out:sqlite3_stmt对象
/// \param pzTail out:指向剩余未编译的第一个字符
/// \return 
///
int sqlite3_prepare(sqlite3 *db,const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);

sqlite3_bind_* 系列函数
函数作用:绑定value,若SQL语句无参数,该步骤省略。SQlite提供了一系列函数分别对应整形、文本等内容的绑定,这里暂时不作说明。

执行语句

sqlite3_step函数
函数作用: 执行实例化为sqlite3_stmt类型的SQL语句。
函数原型:

///
/// \brief sqlite3_step
/// \param pStmt sqlite3_stmt对象
/// \return 
///
int sqlite3_step(sqlite3_stmt* pStmt);

返回值:
SQLITE_DONE:表示sql语句执行完成,并且执行成功。
SQLITE_ROW:表示当前的返回结果中包含一行结果数据,通过sqlite3_column_* 系列函数解析数据。

释放对象

sqlite3_finalize函数
函数作用: 释放sqlite3_stmt对象,避免内存泄漏。
函数原型:

///
/// \brief sqlite3_finalize
/// \param pStmt sqlite3_stmt对象
/// \return 
///
int sqlite3_finalize(sqlite3_stmt *pStmt);

关闭数据库:

sqlite3_close函数
函数作用:关闭数据库,释放资源。
函数原型:

int sqlite3_close(sqlite3* db);

其他说明:

  • 无论是否成功打开数据库连接,数据库操作结束时,都应该通过sqlite3_close()函数来释放数据库相关资源,避免程序内存泄漏。

示例

数据库操作流程:
创建数据库–》打开数据库–》设置SQL语句–》执行SQL语句–》操作结束,关闭数据库。
数据库操作代码示例:

// 创建数据库
sqlite3 * database;
// 打开数据库,内存中的临时数据库
int result = sqlite3_open(":memory:", &database);
if(SQLITE_OK != result)
{
    // error
}
else
{
    // SQL语句,查询表demotable中的name字段
    char sql[] =SELECT num FROM demotable ORDER BY num DESC LIMIT 1;
    // 执行SQL语句
    sqlite3_stmt * stmt;
    sqlite3_prepare(database, sql, strlen(sql), stmt, null);
    if (SQLITE_ROW == sqlite3_step(stmt))
    {
        int id = sqlite3_column_int(stmt, 0);
    }

   sqlite3_finalize(stmt);
}
// 关闭数据库
sqlite3_close(database);
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。