Sqlite 常用函数 推荐

 更新时间:2020年7月11日 17:17  点击:2590
1 、打开数据库:
说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建。第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
返回值:表示操所是否正确 ( SQLITE_OK 操作正常)

2 、关闭数据库:
说明:如果用 sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。
int sqlite3_close(sqlite3*); // 参数就是刚才的结构体,也就是数据库句柄

3 、执行 SQL 语句:
说 明:这个函数的功能是执行一条或者多条 SQL 语句, SQL 语句之间用 “;” 号隔开。建议在执行一条或者多条 SQL 语句得时候,指定第三个参数回调函数,在 回调函数中可以获得执行 Sql 得详细过程,如果所有 Sql 执行完毕则应该返回 0 ,否则,则说明这次执行并没有完全成功。第五个参数:如果执行失败(没有返回 0 )则可以查看第五个阐述得值。来查看详细错误信息。
int sqlite3_exec(
sqlite3*, /* 已经打开的数据库句柄 */
const char *sql, /* 要执行的 Sql 语句 */
sqlite_callback, /* 回调函数 */
void *, /* 传递给回调函数的参数 */
char **errmsg /* 保存错误信息 */
);
通常 sqlite3_callback 和它后面的 void* 这两个位置都可以填 NULL ,表示不需要回调。比如您做 insert 操作,做 delete 操作,就没有必要使用回调。而当作 select 时,就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

4 、 exec 的回调
typedef int (*sqlite3_callback)(void*, int, char**, char**);
说明:你的回调函数必须定义为上面这个函数的类型。
例如:
int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name )
{
//para 是你在 sqlite3_exec 里传入的 void * 参数
// 通过 para 参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是 void* 类型,必须强制转换成你的类型才可用)。然后操作这些数据
//n_column 是这一条记录有多少个字段 ( 即这条记录有多少列 )
// char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个 1 维数组(不要以为是 2 维数组),每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以 \0 结尾)
//char ** column_name 跟 column_value 是对应的,表示这个字段的字段名称

5 、取当前插入位置:
功能:返回你前一次插入得位置,从 1 开始, sqlite3* 为你打开数据库所得到得句柄。
long long int sqlite3_last_insert_rowid(sqlite3*);
6 、非回调 select 查询:
功能:执行一次查询 Sql 并且返回得到一个记录集。
int sqlite3_get_table(
sqlite3*, /* 已经打开的数据库句柄 */
const char *sql, /* 要执行的 Sql 语句 */
char ***resultp, /* 保存返回记录集的指针 */
int *nrow, /* 返回记录数(及查出多少行) */
int *ncolumn, /* 返回字段数(多少列) */
char **errmsg /* 返回错误信息 */
)
说明:第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。
实例:
int main( int , char ** )
{
sqlite3 * db;
int result;
char * errmsg = NULL;
char **dbResult;
int nRow, nColumn;
int i , j;
int index;
result = sqlite3_open( “c:\\Dcg_database.db”, &db );
if( result != SQLITE_OK )
{
return -1;
}
// 数据库操作代码
// 假设前面已经创建了 MyTable_1 表
// 开始查询,传入的 dbResult 已经是 char ** ,这里又加了一个 & 取地址符,传递进去的就成了 char ***
result = sqlite3_get_table( db, “select * from MyTable_1”, &dbResult, &nRow, &nColumn, &errmsg );
if( SQLITE_OK == result )
{
// 查询成功
index = nColumn; // 前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据
printf( “ 查到 %d 条记录 \n”, nRow );
for( i = 0; i < nRow ; i++ )
{
printf( “ 第 %d 条记录 \n”, i+1 );
for( j = 0 ; j < nColumn; j++ )
{
printf( “ 字段名 :%s ?> 字段值 :%s\n”, dbResult[j], dbResult [index] );
++index; // dbResult 的字段值是连续的,从第 0 索引到第 nColumn - 1 索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf( “-------\n” );
}
}
// 到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放
sqlite3_free_table( dbResult );
// 关闭数据库
sqlite3_close( db );
return 0;
}

7 、释放查询结果:
功能:释放当前查询的记录集所占用的内存
void sqlite3_free_table(char **result);

实例:( SQLite 数据库使用回调函数的简单 C 语言实例)
复制代码 代码如下:

#include <stdio.h>
#include <sqlite3.h>
static int callback( void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for (i=0; i<argc; i++)
{
printf( "%s = %s\n" , azColName[i], argv[i] ? argv[i] : "NULL" );
}
printf( "\n" );
return 0;
}
int main( int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if ( argc!=3 )
{
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n" , argv[0]);
return 1;
}
rc = sqlite3_open(argv[1], &db);
if ( rc )
{
fprintf(stderr, "Can't open database: %s\n" , sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if ( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n" , zErrMsg);
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
return 0;
}

编译:
[root@localhost test]# gcc sql.c -o sql -l sqlite3
[!--infotagslink--]

相关文章

  • C#简单访问SQLite数据库的方法(安装,连接,查询等)

    这篇文章主要介绍了C#简单访问SQLite数据库的方法,涉及SQLite数据库的下载、安装及使用C#连接、查询SQLIte数据库的相关技巧,需要的朋友可以参考下...2020-06-25
  • C#中嵌入SQLite数据库的简单方法

    本文给大家介绍的是C#中嵌入SQLite数据库的简单方法,十分的方便也很实用,有需要的小伙伴可以参考下。...2020-06-25
  • 一文秒懂python正则表达式常用函数

    这篇文章主要介绍了python正则表达式常用函数及使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07
  • C#创建SQLite控制台应用程序详解

    这篇文章主要为大家详细介绍了C#创建SQLite控制台应用程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Sqlite 常用函数 推荐

    Sqlite 常用函数,在实际开发中,经常遇的到。...2020-07-11
  • C#解决SQlite并发异常问题的方法(使用读写锁)

    这篇文章主要介绍了C#解决SQlite并发异常问题的方法,通过使用读写锁达到多线程安全访问,进而解决SQLite并发异常的问题,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#操作SQLite数据库之读写数据库的方法

    这篇文章主要介绍了C#操作SQLite数据库之读写数据库的方法,简单分析了C#针对SQLite数据库的读写及显示等操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...2020-06-25
  • C# SQLite执行效率的优化教程

    这篇文章主要给大家介绍了关于C# SQLite执行效率优化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C# SQLite具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • SQLite 入门教程四  增删改查 有讲究

    增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点。 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作...2020-07-11
  • php SQLite增删改减实现代码

    db.execsql(sql); 或者db.insert()、db.delete()、db.update(),并且包括数据表的创建和删除等等也可以通过execsql实现 //创建表 代码如下 复制代码 ...2016-11-25
  • C# SQLite事务操作方法分析

    这篇文章主要介绍了C# SQLite事务操作方法,简单分析了使用SQL代码及C#代码实现事务功能的操作技巧,需要的朋友可以参考下...2020-06-25
  • C# SQlite操作方法小结

    这篇文章主要介绍了C# SQlite操作方法,较为详细的讲述了SQLite的下载与C#针对SQLite的连接、创建、与执行SQL语句等操作相关技巧,需要的朋友可以参考下...2020-06-25
  • C#/.Net 中快速批量给SQLite数据库插入测试数据

    这篇文章主要介绍了C#/.Net 中快速批量给SQLite数据库插入测试数据,本文直接给出实例代码,需要的朋友可以参考下...2020-06-25
  • sqlite时间戳转时间语句(时间转时间戳)

    这篇文章主要介绍了sqlite时间戳转时间、时间转时间戳的方法,需要的朋友可以参考下...2020-07-11
  • SQLite教程(二):C/C++接口简介

    这篇文章主要介绍了SQLite教程(二):C/C++接口简介,本文讲解了C/C++接口概述、核心对象和接口、参数绑定等内容,需要的朋友可以参考下...2020-07-11
  • sqlite 数据库连接类

    sqlite 数据库连接类就是利用了php 与sqlite进行连接操作。 代码如下 复制代码 ...2016-11-25
  • python 操作sqlite数据库的方法

    sqlite的官网 sqlite.org/index.html SQLite 作为一个SQL数据库引擎,是由C语言实现的,又小又快,具有高可靠性且功能齐全。 作为嵌入式数据库,在移动设备中使用非常广泛且方便。本文讲解如何使用python操作sqlite数据库...2021-06-23
  • C#中增加SQLite事务操作支持与使用方法

    这篇文章主要介绍了C#中增加SQLite事务操作支持与使用方法,结合实例形式分析了C#中针对SQLite事务操作的添加及使用技巧,需要的朋友可以参考下...2020-06-25
  • SQLite教程(四):内置函数

    这篇文章主要介绍了SQLite教程(四):内置函数,本文讲解了聚合函数、核心函数、日期和时间函数、,需要的朋友可以参考下...2020-07-11