数据库操作的基本步骤:
0.连接数据库
1.打开数据库
2.操作数据库
3.关闭数据库
sqlite3的基本元素:
两个对象与八个方法
一.封装系列
1.建立连接、打开数据库
int sqlite3_open(
  const char *filename,   /* 字符串形式的数据库名(UTF-8),存在则打开,不存在则创建 */
  sqlite3 **ppDb          /* 输出:连接对象 */
);
返回值:成功返回SQLITE_OK
其它值表示失败
//获取错误信息
const char *sqlite3_errmsg(sqlite3*);
2.操纵数据库
int sqlite3_exec(
  sqlite3*,                                  /* 代表打开的数据库 */
  const char *sql,                           /* 字符串形式的SQL语句 */
  int (*callback)(void*,int,char**,char**),  /* 回调函数 */
  void *,                                    /* 回调函数的第一个参数 */
  char **errmsg                              /* 错误信息写在此处 */
);
注:
如果要执行的SQL语句没有结果集返回(create,insert,update,delete等),那么就不需要写回调函数
如果要执行的SQL语句有结果集返回(select),那就必须写一个回调函数去获取返回的结果集
回调函数:
int callback(
void* arg,//exec的第四个参数
int  columnCount,//列的数目
char** columnValues, //列值数组
char** columnNames  //列名数组
)
只要查询到一条记录,该回调函数就调用一次
返回值必须是正常返回,即return 0;
3.关闭数据库
int sqlite3_close(sqlite3*)
gcc 01sqlite3_exec.c -I/home/csgec/build/sqlite3-pc/include/ 
 -L/home/csgec/build/sqlite3-pc/lib 
 -lsqlite3
----------------------------------------------------------------------------------------------------------------------------------
练习:使用sqlite3函数
#include<stdio.h>
#include<sqlite3.h>       ///  /home/csgec/build/sqlite3-pc/includeint main()
{//1建立连接,打开数据库sqlite3 *db;int res = sqlite3_open("/home/csgec/test.db",&db);if(res != SQLITE_OK){fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db));sqlite3_close(db);return 1;}printf("open or creat db ok!\n");//2.操纵数据库char *errmsg;char *createSql = "create table if not exists tb_stu(id integer primary key ,name text not null,age integer);";res = sqlite3_exec(db,createSql,NULL,NULL,&errmsg);if(res != SQLITE_OK){fprintf(stderr,"exec error:%s\n",errmsg);sqlite3_close(db);return 1;}printf("exec ok!\n");int id;char name[20];int age;scanf("%d%s%d",&id,name,&age);char insertSql[1024];sprintf(insertSql,"insert into tb_stu values(%d,'%s',%d);",id,name,age);printf("insertSql = %s\n",insertSql);res = sqlite3_exec(db,insertSql,NULL,NULL,&errmsg);if(res != SQLITE_OK){fprintf(stderr,"insert error:%s\n",errmsg);sqlite3_free(errmsg);sqlite3_close(db);return 1;}//3.关闭数据库sqlite3_close(db);return 0;
}
----------------------------------------------------------------------------------------------------------------------------------
练习:回调函数的使用
#include<stdio.h>
#include<sqlite3.h>  //  -I /home....int callback(void *arg,int count,char **names,char **values);
int main()
{sqlite3*db;int res = sqlite3_open("/home/csgec/test.db",&db);if(res != SQLITE_OK){fprintf(stderr,"open db err: %s \n",sqlite3_errmsg(db));sqlite3_close(db);return -1;}char *selectSql = "select id,name,age from tb_stu;";char *errmsg;res = sqlite3_exec(db,selectSql,callback,NULL,&errmsg);if(res != SQLITE_OK){fprintf(stderr,"exec err: %s \n",errmsg);sqlite3_free(errmsg);sqlite3_close(db);return -1;}sqlite3_close(db);return 0;
}int callback(void *arg,int count,char **values,char **names)
{printf("count = %d\n",count);int i;for(i = 0; i < count; i++){printf("%s\t",names[i]);}printf("\n");for(i = 0; i < count; ++i){printf("%s\t",values[i]);}printf("\n");return 0;
}
----------------------------------------------------------------------------------------------------------------------------------
二.详细系列
1.建立连接、打开数据库
int sqlite3_open(
  const char *filename,   /* 字符串形式的数据库名(UTF-8),存在则打开,不存在则创建 */
  sqlite3 **ppDb          /* 输出:连接对象 */
);
返回值:成功返回SQLITE_OK
其它值表示失败
//获取错误信息
const char *sqlite3_errmsg(sqlite3*);
2.准备/编译SQL语句
int sqlite3_prepare_v2(
  sqlite3 *db,            /* 打开的数据库 */
  const char *zSql,       /* 原始的字符串形式的SQL语句*/
  int nByte,              /* 字符串形式的SQL语句的长度,单位是字节 */
  sqlite3_stmt **ppStmt,  /* 输出:字节码形式的SQL语句对象 */
  const char **pzTail     /* 输出: 指向字符串SQL语句中未使用的部分,一般给NULL */
);
返回值:成功返回SQLITE_OK
其它值表示失败
3.执行语句对象
int sqlite3_step(sqlite3_stmt*);
参数:字节码形式的SQL语句对象
返回值:如果你的SQL语句没有返回结果集,成功返回SQLITE_DONE
如果你的SQL语句有返回结果集,成功返回SQLITE_ROW
其它值表示失败
4.销毁语句对象
int sqlite3_finalize(sqlite3_stmt *pStmt);
参数:字节码形式的SQL语句对象
返回值:成功返回SQLITE_OK
其它值表示失败
5.关闭数据库
int sqlite3_close(sqlite3*)
编译.c文件,需要连接数据库(sqlite3数据库的下载与安装请见另一篇文章sqlite3数据库ubuntu移植&arm开发板移植)
gcc 01sqlite3_exec.c -I/home/csgec/build/sqlite3-pc/include/ 
 -L/home/csgec/build/sqlite3-pc/lib 
 -lsqlite3
----------------------------------------------------------------------------------------------------------------
绑定值:
int sqlite3_bind_blob (sqlite3_stmt*, int, const void*, int n, void(*)(void*));
int sqlite3_bind_double (sqlite3_stmt*, int, double);
int sqlite3_bind_int (sqlite3_stmt*, int, int);
int sqlite3_bind_null (sqlite3_stmt*, int);
int sqlite3_bind_text (sqlite3_stmt*, int,const char*,int,void(*)(void*));
第一个参数:语句对象
第二个参数:索引位置,即要把值绑定到哪个位置,下标从1开始计
第三个参数:要绑定的值
第四个参数:要绑定的值的长度
第五个参数:函数指针,清理函数,一般给NULL
返回值:成功返回SQLITE_OK
其它表示失败
重置语句对象:
sqlite3_reset(sqlite3_stmt*)
----------------------------------------------------------------------------------------------------------------
练习:绑定值函数的使用
#include<stdio.h>
#include<sqlite3.h>       ///  /home/csgec/build/sqlite3-pc/include
#include<string.h>
int main()
{//1建立连接,打开数据库sqlite3 *db;int res = sqlite3_open("/home/csgec/test.db",&db);if(res != SQLITE_OK){fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db));sqlite3_close(db);return 1;}printf("open or creat db ok!\n");//2.操纵数据库int id;char name[20];int age;char *insertSql = "insert into tb_stu values(?,?,?);";sqlite3_stmt *stmt;res = sqlite3_prepare_v2(db,insertSql,strlen(insertSql),&stmt,NULL);if(res != SQLITE_OK){fprintf(stderr,"prepare error:%s\n",sqlite3_errmsg(db));sqlite3_close(db);return -1;}printf("prepare ok!\n");while(1){scanf("%d%s%d",&id,name,&age);sqlite3_bind_int(stmt,1,id);sqlite3_bind_text(stmt,2,name,strlen(name),NULL);sqlite3_bind_int(stmt,3,age);//3.执行res = sqlite3_step(stmt);printf("step res = %d\n",res);if(res != SQLITE_DONE){fprintf(stderr,"step error:%s\n",sqlite3_errmsg(db));}sqlite3_reset(stmt);}//4.销毁sqlite3_finalize(stmt);//5.关闭数据库sqlite3_close(db);return 0;
}
----------------------------------------------------------------------------------------------------------------
获取列值:
const void *sqlite3_column_blob (sqlite3_stmt*, int iCol);
int sqlite3_column_bytes (sqlite3_stmt*, int iCol);
double sqlite3_column_double (sqlite3_stmt*, int iCol);
int sqlite3_column_int (sqlite3_stmt*, int iCol);
const unsigned  char *sqlite3_column_text(sqlite3_stmt*, int iCol);
第一个参数:语句对象
第二个参数:下标位置,返回的一条记录的某列的下标,从0开始计
sqlite3_column_count
sqlite3_column_type
sqlite3_column_name
----------------------------------------------------------------------------------------------------------------
练习:获取列值函数的使用
#include<stdio.h>
#include<sqlite3.h>       ///  /home/csgec/build/sqlite3-pc/include
#include<string.h>
int main()
{//1建立连接,打开数据库sqlite3 *db;int res = sqlite3_open("/home/csgec/test.db",&db);if(res != SQLITE_OK){fprintf(stderr,"open db err:%s\n",sqlite3_errmsg(db));sqlite3_close(db);return 1;}printf("open or creat db ok!\n");//2.操纵数据库char *selectSql = "select id,name,age from tb_stu;";sqlite3_stmt *stmt;res = sqlite3_prepare_v2(db,selectSql,-1,&stmt,NULL);if(res != SQLITE_OK){fprintf(stderr,"prepare err:%s\n",sqlite3_errmsg(db));sqlite3_close(db);return 1;}res = sqlite3_step(stmt);while(res == SQLITE_ROW){int id = sqlite3_column_int(stmt,0);const char*name = sqlite3_column_text(stmt,1);int age = sqlite3_column_int(stmt,2);printf("%d\t%s\t%d\n",id,name,age);res = sqlite3_step(stmt);}//4.销毁sqlite3_finalize(stmt);//5.关闭数据库sqlite3_close(db);return 0;
}

sqlite3数据库函数相关推荐

  1. Unix环境高级编程(二十一)数据库函数库

    本章的内容是开发一个简单的.多用户数据库的C函数库.调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录.绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁 ...

  2. thinkphp mysql函数_php封装的数据库函数与用法示例【参考thinkPHP】

    本文实例讲述了php封装的数据库函数与用法.分享给大家供大家参考,具体如下: 从Thinkphp里面抽离出来的数据库模块,感觉挺好用 common.php: /** * 通用函数 */ //包含配置文 ...

  3. Mysql数据库函数(数字,字符串,日期时间)

    文章目录 Mysql数据库函数(数字,字符串,日期时间) 数学函数 字符串函数 日期函数 Mysql数据库函数(数字,字符串,日期时间) 数学函数 abs(x) :返回x的绝对值 rand() :返回 ...

  4. php访问mysql函数吗,PHP访问MySQL数据库函数简介

    PHP访问MySQL数据库函数简介 PHP访问MySQL数据库函数简介 1. 进行数据库连接 连接数据库服务器,就是客户端向己运行的数据库服务器发出连接请求, 成功以后就可以对数据库进行相应操作,由于 ...

  5. python调用数据库数据创建函数_Pyhton应用程序数据库函数封装

    1.函数 2.迭代器 3.递归 4.数据库函数 5.fetchall函数 1.函数:实现指定功能代码的集合 def 函数名( ) : 2.在python中没有括号,函数体以缩进的方式进行展示 快捷键: ...

  6. db h2 数据类型_H2数据库函数及数据类型概述-阿里云开发者社区

    H2数据库函数及数据类型概述 jieforest 2015-01-29 573浏览量 简介: H2数据库函数及数据类型概述 一.H2数据库常用数据类型 INT类型:对应java.lang.Intege ...

  7. django 1.8 官方文档翻译: 2-5-10 数据库函数

    数据库函数 New in Django 1.8. 下面记述的类为用户提供了一些方法,来在Django中使用底层数据库提供的函数用于注解.聚合或者过滤器等操作.函数也是表达式,所以可以像聚合函数一样混合 ...

  8. 测试操作数据库mysql数据库吗_软件测试-MySQL(六:数据库函数)

    一.MySQL函数 1.数学函数 PI()  #返回pi的值(圆周率)默认显示小数位数是6位 FLOOR(x) 返回小于x的最大整数(去掉小数取整) CEILING(x)进一取整 ROUND(x,y) ...

  9. Mysql之--------------------多表查询(内连接 左外连接 右外连接)常见的数据库函数

    一.多表查询 什么是多表查询呢? 比如说,一个老师肯定会有不止一个学生,一个学生也会有不止一个老师,这样就存在了一种多对多的关系. 多对多关系表的创建 CREATE DATABASE moreandm ...

  10. oracle evaluate,Oracle BIEE EVALUATE系列使用数据库函数

    Oracle BIEE11中提供了EVALUATE这个函数,扩展了可以使用oracle函数的功能.以前看过晃晃悠悠写的EVALUATE的用法.我想补充另外用法.EVALUATE系列不只有BIEE Ad ...

最新文章

  1. Windows 7 SDK Fails to Install with Return Code 5100 (GRMSDK_EN_DVD.iso)
  2. git解决pre-commit hook failed的问题
  3. html 换行符_每个非网站开发人员都应该了解的21个HTML基础知识
  4. SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
  5. oracle表是动态表怎么算排名,Oracle学习动态性能表
  6. Java中的properties文件中的key不能使用项目中的接口名和Java文件名
  7. AttributeError: module ‘tensorflow‘ has no attribute ‘xxx‘
  8. 用来理解 Java 编程语言的 8 个图表
  9. 自学python需要安装什么-初学 Python 需要安装哪些软件?
  10. 开发你自己的XMPP 续 - Openfire 插件开发
  11. android 9 one ui,终于!三星S9系列国行开测安卓9.0系统:OneUI真香!
  12. 基于51单片机的四通道交通灯设计
  13. J-Link软件和文档包的版本发行说明(4)[V6.50 ~ V6.90a版本]
  14. (附源码)springboot火车票订票系统 毕业设计 171538
  15. python 多因素方差分析_SPSS分析技术:多元方差分析
  16. 怎么设置系统消息免打扰,看这里就够了,WIN10系统如何设置系统消息免打扰
  17. 通信工程/电子信息工程 保研夏令营/预推免流程分析
  18. SpringBoot启动代表出现Process finished with exit code 0
  19. Redis启动、停止、查看
  20. 冻肉进口报关注意事项及进口企业都应该具备哪些资质?

热门文章

  1. AFDX(ARINC664)的交换机规范
  2. 清除ie各种缓存.cmd
  3. HCK哈士奇x可口可乐联名潮酷冰吧,你还没入手吗?
  4. Excel快速实现中英文分列
  5. 计算机桌面显示保护眼睛设置,电脑屏幕怎么设置才能保护眼睛
  6. SQLite的主键外键
  7. (2021) 26 [持久化] 持久数据的可靠性:RAID和journaling
  8. springboot 防止xss 和sql 注入 改写 http 请求 getParameter,getParameterValues,getHeader等方法 有点东西
  9. 有限元分析类毕业论文文献(推荐10篇)
  10. HCIE大师之路(一)——VRRP+DHCP+RSTP综合实验