Sqlite 常用函数

1 、打开数据库:

说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建。第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。

  1. int sqlite3_open(
  2. const char *filename, /* Database filename (UTF-8) */
  3. sqlite3 **ppDb /* OUT: SQLite db handle */
  4. );

返回值:表示操所是否正确 ( SQLITE_OK 操作正常)

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

3 、执行 SQL 语句:
说 明:这个函数的功能是执行一条或者多条 SQL 语句, SQL 语句之间用 “;” 号隔开。建议在执行一条或者多条 SQL 语句得时候,指定第三个参数回调函数,在 回调函数中可以获得执行 Sql 得详细过程,如果所有 Sql 执行完毕则应该返回 0 ,否则,则说明这次执行并没有完全成功。第五个参数:如果执行失败(没有返回 0 )则可以查看第五个阐述得值。来查看详细错误信息。

  1. int sqlite3_exec(
  2. sqlite3*, /* 已经打开的数据库句柄 */
  3. const char *sql, /* 要执行的 Sql 语句 */
  4. sqlite_callback, /* 回调函数 */
  5. void *, /* 传递给回调函数的参数 */
  6. char **errmsg /* 保存错误信息 */
  7. );

通常 sqlite3_callback 和它后面的 void* 这两个位置都可以填 NULL ,表示不需要回调。比如您做 insert 操作,做 delete 操作,就没有必要使用回调。而当作 select 时,就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

4 、 exec 的回调
typedef int (*sqlite3_callback)(void*, int, char**, char**);
说明:你的回调函数必须定义为上面这个函数的类型。
例如:

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

5 、取当前插入位置:

功能:返回你前一次插入得位置,从 1 开始, sqlite3* 为你打开数据库所得到得句柄。
long long int sqlite3_last_insert_rowid(sqlite3*);
6 、非回调 select 查询:
功能:执行一次查询 Sql 并且返回得到一个记录集。

  1. int sqlite3_get_table(
  2. sqlite3*, /* 已经打开的数据库句柄 */
  3. const char *sql, /* 要执行的 Sql 语句 */
  4. char ***resultp, /* 保存返回记录集的指针 */
  5. int *nrow, /* 返回记录数(及查出多少行) */
  6. int *ncolumn, /* 返回字段数(多少列) */
  7. char **errmsg /* 返回错误信息 */
  8. )

说明:(www.jbxue.com)第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。

实例:

  1. int main( int , char ** )
  2. {
  3. sqlite3 * db;
  4. int result;
  5. char * errmsg = NULL;
  6. char **dbResult;
  7. int nRow, nColumn;
  8. int i , j;
  9. int index;
  10. result = sqlite3_open( c:\\Dcg_database.db”, &db );
  11. if( result != SQLITE_OK )
  12. {
  13. return -1;
  14. }
  15. // 数据库操作代码
  16. // 假设前面已经创建了 MyTable_1 表
  17. // 开始查询,传入的 dbResult 已经是 char ** ,这里又加了一个 & 取地址符,传递进去的就成了 char ***
  18. result = sqlite3_get_table( db, select * from MyTable_1”, &dbResult, &nRow, &nColumn, &errmsg );
  19. if( SQLITE_OK == result )
  20. {
  21. // 查询成功
  22. index = nColumn; // 前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据
  23. printf( 查到 %d 条记录 \n”, nRow );
  24. for( i = 0; i < nRow ; i++ )
  25. {
  26. printf( %d 条记录 \n”, i+1 );
  27. for( j = 0 ; j < nColumn; j++ )
  28. {
  29. printf( 字段名 :%s ?> 字段值 :%s\n”, dbResult[j], dbResult [index] );
  30. ++index; // dbResult 的字段值是连续的,从第 0 索引到第 nColumn - 1 索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
  31. }
  32. printf( “-------\n );
  33. }
  34. }
  35. // 到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放
  36. sqlite3_free_table( dbResult );
  37. // 关闭数据库
  38. sqlite3_close( db );
  39. return 0;
  40. }

7 、释放查询结果:

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

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

  1. #include <stdio.h>
  2. #include <sqlite3.h>
  3. static int callback( void *NotUsed, int argc, char **argv, char **azColName)
  4. {
  5. int i;
  6. for (i=0; i<argc; i++)
  7. {
  8. printf( "%s = %s\n" , azColName[i], argv[i] ? argv[i] : "NULL" );
  9. }
  10. printf( "\n" );
  11. return 0;
  12. }
  13. int main( int argc, char **argv)
  14. {
  15. sqlite3 *db;
  16. char *zErrMsg = 0;
  17. int rc;
  18. if ( argc!=3 )
  19. {
  20. fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n" , argv[]);
  21. return 1;
  22. }
  23. rc = sqlite3_open(argv[], &db);
  24. if ( rc )
  25. {
  26. fprintf(stderr, "Can't open database: %s\n" , sqlite3_errmsg(db));
  27. sqlite3_close(db);
  28. return 1;
  29. }
  30. rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
  31. if ( rc!=SQLITE_OK )
  32. {
  33. fprintf(stderr, "SQL error: %s\n" , zErrMsg);
  34. sqlite3_close(db);
  35. return 1;
  36. }
  37. sqlite3_close(db);
  38. return 0;
  39. }

编译:

[root@localhost test]# gcc sql.c -o sql -l sqlite3

Sqlite 常用函数推荐的更多相关文章

  1. SQLite 常用函数

    SQLite 常用函数 参考: SQLite 常用函数 | 菜鸟教程http://www.runoob.com/sqlite/sqlite-functions.html SQLite 常用函数 SQL ...

  2. SQLite常用函数及语句

    SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...

  3. SQLite常用函数

    length(column_name) 取得相应栏位的长度 substr(column_name, start, length) 截取某个栏位相应长度的值

  4. SQLite进阶-19.常用函数

    目录 SQLite常用函数 SQLite常用函数 SQLite 有许多内置函数用于处理字符串或数字数据. 序号 函数 & 描述 1 SQLite COUNT 函数SQLite COUNT 聚集 ...

  5. iOS开发数据库篇—SQLite常用的函数

    iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 * ...

  6. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  7. 十分钟能学会的框架,MVC+20个常用函数

    LazyPHP(以下简称LP)是一个轻框架. 之所以开发这么一个框架,是因为其他框架给的太多.在高压力的情况下,ORM和盘根错节的对象树反而将简单的页面请求处理复杂化,在调试和性能上带来反面效果. L ...

  8. mysql常用函数参考

    mysql常用函数参考   对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...

  9. C#string常用函数总结

    补充:             1:在C语言里 char占1个字节 而在C#,Java里char占两个字节 数据库里char 中汉占两个字节 字母数字占一个字             2:string ...

随机推荐

  1. Inside GDALAllRegister之四: 跳过driver

    这个函数很短小: /** * \brief This method unload undesirable drivers. * * All drivers specified in the space ...

  2. linux more 上一页,下一页

    linux more 上一页,下一页 使用more命令可以分页查看内容: 如: more install.txt 分页查看文本内容: 按回车:默认下一行数据: 按空格键盘,默认下一页,以当前屏幕为单位 ...

  3. Eclipse 如何创建Web项目

      Eclipse 如何创建Web项目 CreateTime--2018年3月8日16:43:33 Author:Marydon 第一步: 右键-->New-->Dynamic Web P ...

  4. 使用poi导出execl

    使用poi需要用到的jar包 本文的导出基于execl的模板导出,在大部分表头固定而格式花样比较复杂的建议使用本文介绍的方法(表头固定,只需要填充值) 1.在webroot目录下新建report文件夹 ...

  5. python中的多态

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作 ...

  6. 自定义AppSession

    TelnetSession.cs public class TelnetSession:AppSession<TelnetSession> { protected override voi ...

  7. java 正则举例

    Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m ...

  8. bash: fork: Resource temporarily unavailable

    Last login: Wed Jul 26 09:19:11 2017 from ... -bash: fork: Resource temporarily unavailable -bash-3. ...

  9. linuxGDB下动态链接库的调试

    (gdb) file <你的exe>(gdb) load <你的so>                #这条应该是可选的 (gdb) dir <so'dir>(gd ...

  10. CoreData 增删改查

    #pragma mark - Core Data Methods - (void)insertObjectWithFileName:(NSString *)fileName { /** SQL新增记录 ...