SQLite——step操作
本文使用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);
- 点赞
- 收藏
- 关注作者
评论(0)