Sqlite 常用函数 推荐

更新时间:2009年09月25日 23:21:57   作者:

Sqlite 常用函数,在实际开发中,经常遇的到。

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

#include

static int callback( void *NotUsed, int argc, char **argv, char **azColName)

{

int i;

for (i=0; 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

相关文章

打开数据库,插入,查询数据库等,如果操作接口输入参数包含中文字符,会导致操作异常,这是由于sqlite数据库使用的是UTF-8编码方式2013-04-04

Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记2013-12-12

这篇文章主要介绍了sqlite时间戳转时间、时间转时间戳的方法,需要的朋友可以参考下2014-06-06

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

相信使用PHP开发的人员一定不会对SQLite感到陌生了,PHP5已经集成了这个轻量型的数据库。并且很多虚拟主机无论是win还是*nux都支持它。2009-08-08

这篇文章主要介绍了SQLite教程(九):在线备份,本文讲解了常用备份方法、在线备份APIs简介、高级应用技巧等内容,需要的朋友可以参考下2015-05-05

相信使用PHP开发的人员一定不会对SQLite感到陌生了,PHP5已经集成了这个轻量型的数据库。并且很多虚拟主机无论是win还是*nux都支持它。2011-08-08

SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~2008-09-09

Sqlite 常用函数,在实际开发中,经常遇的到。2009-09-09

增删改查操作,其中增删改操作被称为数据操作语言 DML,相对来说简单一点。 查操作相对来说复杂一点,涉及到很多子句,所以这篇先讲增删改操作,以例子为主,后面再讲查操作2013-12-12

最新评论

sqlite+php+函数大全,Sqlite 常用函数 推荐相关推荐

  1. oracle常用函数api,Oracle-API OracleAPI、oracle10G函数大全(常用函数)、 联合开发网 - pudn.com...

    Oracle-API 所属分类:Oracle数据库 开发工具:SQL 文件大小:13650KB 下载次数:20 上传日期:2013-09-03 13:09:39 上 传 者:蓝 说明:  Oracle ...

  2. python3常用函数大全_Python3NumPy——常用函数

    Python3NumPy的常用函数 1. txt文件 (1) 单位矩阵,即主对角线上的元素均为1,其余元素均为0的正方形矩阵. 在NumPy中可以用eye函数创建一个这样的二维数组,我们只需要给定一个 ...

  3. hive函数大全、常用函数(超全!!!)

    目录 一.关系运算: 1. 等值比较: = 2. 不等值比较: <> 3. 小于比较: < 4. 小于等于比较: 5. 大于比较: > 6. 大于等于比较: >= 7. ...

  4. python常用函数大全-python常用函数与用法示例

    本文实例讲述了python常用函数与用法.分享给大家供大家参考,具体如下: 自定义函数实例 # 定义一个函数 def printme( str ): "打印任何传入的字符串" pr ...

  5. asp系统转换php系统时间函数,ASP_ASP中的时间函数大全 时间操作函数,Date 函数 描述:返回当前系统日 - phpStudy...

    ASP中的时间函数大全 时间操作函数 Date 函数 描述:返回当前系统日期. 语法:Date DateAdd 函数 描述:返回已添加指定时间间隔的日期. 语法:DateAdd(interval, n ...

  6. oracle中各种函数,oracle中常用函数大全

    1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...

  7. php 的常用内置函数大全,php常用内置函数

    常用MSSQL 内置函数列表 函数名 参数 函数功能 COL_LENGTH ( ... Python 常用内置函数总结一.数学相关 1.绝对值:abs(-1) 2.最大... python 内置函数大 ...

  8. php常用系统函数库,PHP常用函数大全

    php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...

  9. oracle 中n次方函数,oracle中常用函数大全

    1.数值型常用函数 函数 返回值 样例 显示 ceil(n) 大于或等于数值n的最小整数 select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数 s ...

最新文章

  1. python布尔类型运算_Python中与或非运算(布尔运算)
  2. Spark SQL 源代码分析系列
  3. 基于VTK与Qt的体绘制程序
  4. 【angularjs】使用angular搭建项目,pc端实现网页中的内容不可复制
  5. stn专线和otn有什么区别_专线网络和家庭宽带有什么区别?
  6. 深度学习新星 | 图卷积神经网络(GCN)有多强大?
  7. 190501每日一句
  8. php气泡效果,ps简单制作漂亮的人物气泡效果
  9. HDU 5745 La Vie en rose(水~)
  10. Android 去掉标题栏
  11. AI改写人类起源:黑猩猩并不是我们的祖先!
  12. 基于消息系统架构设计
  13. 13、Horizon App Volumes 安装配置
  14. Spring Security详细讲解(JWT+SpringSecurity登入案例)
  15. 为什么要标准化用户故事格式?
  16. 英伟达收购Arm计划落空,跨国半导体并购难再现?|硅基世界
  17. 前端加载动画/加载等待动画
  18. 电脑维修工具 硬盘检测工具 查查是否有坏道
  19. 常见电子面试知识(2/4)
  20. 解决Revit导出FBX模型材质丢失的问题

热门文章

  1. 软件工程师工作内容和从业要求
  2. IE环境下判断IE版本的语句...[if lte IE 6]……[endif][if lte IE 7]……[endif]
  3. UpdatePannelFileUpload
  4. C#学习-程序集和反射
  5. PHP5安装好了,再附加GD库
  6. row number函数_窗口函数介绍及案例实战
  7. 微信多开软件苹果版_微信PC版 v3.0.0.57 多开amp;消息防撤回
  8. 微课|中学生可以这样学Python(例8.23):快速排序算法
  9. Python使用K-means聚类算法进行分类案例一则
  10. Python使用marshal模块操作二进制文件