1. SQLite数据库特点

(1)SQLite数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过API,应用程序可以直接操作它。

(2)事务的处理是原子的,一致的,独立的,可持久化的(ACID),即使在系统崩溃和掉电后。

(3)SQLite数据库通过独占性与共享锁来实现事务的独立处理。

(4)一个单独的跨平台的磁盘文件就能够存储一个数据库。

(5)能支持2TB级的数据。

(6)自包含,无外部依赖性。

(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等数据类型。

(8)SQLite数据库没有用户帐户的概念。数据库的权限仅依赖于文件系统。

2. SQLite数据库的基本操作

(1)建立数据库

sqlite3 data.sqlite3

在当前目录下建立了名为data.sqlite3的数据库。

(2)建立数据表

create table call_list (id INTEGER PRIMARY KEY, type NUMERIC,telnum NUMERIC,bttime TEXT,tcount NUMERIC,charge_rate NUMERIC,charge_sum NUMERIC);

建立了名为 call_list的数据表,有7个字段,分别为id,type,telnum,bttime,tcount,charge_sum.charge_rate.

(3)向数据表中插入数据

insert into call_list values ($num,1,2,'new',4,5,6);

(4)查询数据表中的数据

select * from call_list;

(5)修改call_list表中的数据

update call_list set id=00001000 where id=10001;

(6)删除表中的数据记录

delete from call_list where id=1000;

(7)SQlite中的其它常用命令

.tables -列出所有的数据库中的数据表

.schema tablename -列出指定数据表的结构

.quit -离开数据库

(8)SQLite数据库的导入与导出

a.将data.sqlite数据库的数据全部导出:

sqlite3 data.sqlite

>.output dd.sql

>.dump

这样,数据就保存在dd.sql的文件中,注意这个文件不是数据库,而是SQL语句。

然后再把这些数据导入到另外一个数据库data1.sqlite数据库中。

sqlite3 data1.sqlite

>.read dd.sql

这样,数据就从data.sqlite数据库复制到data1.sqlite数据库中去了。

b.将数据表中的数据导出到a.txt中去

.output a.txt //输出重定向到a.txt

select * from call_list;

c.将导出的表中的数据导入到另一个数据库的新建的表中去

如:当从data.sqlite中的call_list表中导出了数据,再导入到另外一个数据库表call中去。

首先建立表call.

然后.import a.txt call 即可。

3. C语言操作Sqlite数据库

API:

int sqlite3_open(const char* filename,sqlite3**ppdb);

第一个参数用来指定数据库文件名。

第二个参数是一个数据库标识符指针。

如果打开数据库成功,则返回0,否则返回一个错误代码。

int sqlite3_close(sqlite3*);

传递的参数是数据库标识符指针用来关闭数据库,操作成功是返回0,否则返回一个错误代码。

int sqlite3_errcode(sqlite3*db);

const char* sqlite3_errmsg(sqlite3* db);

const char* sqlite3_errmsg16(sqlite3* db);

这三个函数都是返回错误信息,第一个函数返回的是最近调用数据库接口的错误代码,第二,第三个函数是返回最近调用数据库接口的错误信息。第二个函数返回的错误信息是用UTF-8编码的,第三个函数返回的错误信息是用UTF-16编码的。

int sqlite3_exec(sqlite3*,const char*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);

这个函数非常重用,是用来执行SQLite数据库的SQL语句的。

第一个参数是sqlite数据库标识符指针。

第二个参数是要执行的SQL语句。

第三个参数是一个回调函数,在执行查询操作时用到,其它的操作可以传空值即NULL。

第四个参数是传递给回调函数第一个参数的实参。

第五个参数是一个错误信息。

回调函数: int callback(void*,int argc,char** argv,char** cname);

第一个参数是从sqlite3_exec传递过来的参数,可以为任意的类型。

第二个参数是查询的列数。

第三个参数是查询结果集的值。

第四个参数是列名。

int sqlite3_get_table(sqlite3*db,const char* sql,char***result,int *row,int*col,char** errmsg);

这个函数主要是用来查询的。

第一个参数是数据库描述符指针

第二个参数是SQL语句。

第三个参数是查询的结果集。

第四个参数是结果集中的行数。

第五个参数是结果集中的列数。

第六个参数是错误信息。

它查询出的行数是从字段名开始的。即第0行是字段名。

实例:

/**
本例主要实现用Sqlite的回调函数进行查询
int sqlite3_exec(sqlite3*,const char* sql,int (*callback)(void*,int,char**,char**),void*,errmsg);
第一个参数是数据库标识符
第二个参数是要执行的sql命令
第三个参数是回调函数
第四个参数是回调函数的第一个参数
第五个参数是用于指示错误信息
其中回调函数的形式:
int _sql_callback(void*arg,int argc,char**argv,char**cname);
第二个参数指示结果集中的列数
第三个参数是保存结果集的字符串
第四个参数是结果集中的列名
**/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sqlite3.h>
#include <time.h>
int _call_back(void*arg,int argc,char** argv,char** cname);
int main(){
int res;
const char*dbfile="data.sqlite1";
char*errmsg=NULL;
sqlite3* db;
res=sqlite3_open(dbfile,&db);
if(res!=0){perror("数据库打开失败");exit(EXIT_FAILURE);
}
//创建一张数据表
const char* sqlcreate="create table call_list (id INTEGER PRIMARY KEY, type NUMERIC,telnum NUMERIC,bttime TEXT,tcount NUMERIC,charge_rate NUMERIC,charge_sum NUMERIC)";res=sqlite3_exec(db,sqlcreate,NULL,NULL,&errmsg);
if(res!=0){perror("建立数据表失败");exit(EXIT_FAILURE);
}//插入100000条数据
int num=0;
struct timeval tv;
gettimeofday (&tv , NULL);long old=tv.tv_sec;
while(num<100000){
const char* sqlinsert="insert into call_list values ($num,1,2,'new',4,5,6)";
res=sqlite3_exec(db,sqlinsert,NULL,NULL,&errmsg);//插入时不需要用到回调函数
if(res!=0){perror("插入失败");exit(EXIT_FAILURE);
}
num++;
}gettimeofday(&tv,NULL);
printf("插入100000条数据的时间为:%d秒/n",(tv.tv_sec-old));//更新
const char* sqlupdate="update call_list set id=00001000 where id=10001";
res=sqlite3_exec(db,sqlupdate,NULL,NULL,&errmsg);
if(res!=0){perror("更新数据失败");exit(EXIT_FAILURE);
}
//删除
const char* sqldelete="delete from call_list where id=1000";
res=sqlite3_exec(db,sqldelete,NULL,NULL,&errmsg);
if(res!=0){perror("删除数据失败");exit(EXIT_FAILURE);
}//查询
const char* sqlquery="select * from call_list";
res=sqlite3_exec(db,sqlquery,&_call_back,NULL,&errmsg);if(res!=0){printf("%s/n",errmsg);perror("执行失败/n");exit(EXIT_FAILURE);
}
res=sqlite3_close(db);
if(res!=0){perror("数据库关闭失败");exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);}int _call_back(void* arg,int argc,char**argv,char**cname){int i; //二重指针可以看成指针数组for(i=0;i<argc;i++){printf("%s=%s/n",cname[i],argv[i]);
}return 0;
}
编译与运行:
gcc -o sql sql.c -lsqlite3
可以看到:插入100000万条数据,仅需要542秒。因此,SQLite数据库非常的快。
总之,SQLite数据库对于小型应用程序的开发是非常高效的,常用于手机(Android),PDA中。

Linux C语言操作SQLite数据库相关推荐

  1. go sqlite mysql_Go实战--go语言操作sqlite数据库(The way to go)

    生命不止,继续 go go go !!! 继续与大家分享,go语言的实战,今天介绍的是如何操作sqlite数据库. 何为sqlite3? SQLite is a self-contained, hig ...

  2. Android学习笔记---Android利用Sqlite,并且用sql语言操作SQLite数据库

    6.对数据库进行操作:   一下是对数据库的操作代码,包括添加,删除,更新,查询,和分页,统计 ---------------------------------------------------- ...

  3. C语言操作SQLite数据库

    SQLite头文件和源文件下载地址http://www.sqlite.org/download.html 以下是示例代码 #include <stdio.h> #include " ...

  4. PC软件开发技术之三:C#操作SQLite数据库

    我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式.但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问 ...

  5. C#操作SQLite数据库

    我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式.但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问 ...

  6. C语言操作SQLite

    1 下载源代码 采用C语言操作SQLite数据库时需要引入sqlite3库,我们可以在官网下载源代码后编译. 2 C代码-不用回调函数执行SQL语句 #include <stdio.h> ...

  7. sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例

    本文实例讲述了PHP实现的简单操作SQLite数据库类与用法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...

  8. python数据库操作sqlite_Python3操作SQLite数据库

    Python3操作SQLite数据库 SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目 ...

  9. python对sqlite增删改查_Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】...

    本文实例讲述了python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的 ...

最新文章

  1. linux filesystem_如何使用cgdb + qemu调试linux内核模块
  2. 使用基本的socket函数
  3. 成功解决FileNotFoundError: [Errno 2] No such file or directory: 'F:\\Program Files\\Python\\Python36\\li
  4. python异常处理的作用_python之路——异常处理
  5. QT5开发及实例学习之十三Qt5文本编辑功能
  6. 李开复:多次失败后,我总结出最优秀创业者的4个特点
  7. python解压bz2文件命令_解压缩bz2文件
  8. 生物信息学分析常用网站
  9. homework2的进展
  10. net configuration assistant 没反应_苗阜深夜发文:20年了没被打过,张玉浩,你已经离开青曲社了...
  11. WebView打不开或者显示异常可能原因
  12. cap7 集成学习和随机森林
  13. 20222817《Linux内核原理与分析》第五周作业
  14. 文件损坏打不开怎么办?excel文件修复,看看这些解决办法
  15. 纷享销客标讯通,大客招标经营的杀手锏
  16. 视频加密大全服务条款
  17. android 双层进度条,CircularCounter 双层原形进度条效果《IT蓝豹》
  18. JS实现 移动零 (将数组中零元素移到数组后面)
  19. JavaScript 如何计算两个日期之间的天数
  20. BeanDefinition 合并

热门文章

  1. Java 并发编程之同步工具类 Exchanger
  2. mysql b 树 锁_mysql索引B+树、MVCC、锁一文搞懂
  3. pymysql使用变化的变量,构造SQL语句
  4. tcpdump捕获流量,并切分多个文件保存
  5. docker安装hbase
  6. Python捕获 Warning 警告
  7. 华为大数据战略_任正非:华为应抓住“大数据”机遇 抢占战略制高点
  8. 泸州职称计算机,2018年11月四川泸州职称计算机考试10月8日开始报名
  9. 命令进入mysql创建jira_JIRA使用教程:连接数据库—MySQL_MySQL
  10. java中factory_Java后台面试--Spring中FactoryBean与BeanFactory的使用及区别