`
peizhiinfo
  • 浏览: 1429430 次
文章分类
社区版块
存档分类
最新评论

SQLITE的C语言接口

 
阅读更多
近我正在Linux平台写一个软件,需要用到一个简单的数据库。mysql做数据库固然很好,但其数据是存放在服务器的。我想要的基本功能也就是使用C程序创建一个数据库本地文件,然后可以对这个数据库文件执行基本的sql操作. 就像在Windows平台基于VC6.0的DAO数据库编程一样(创建一个本地文件.mdb).

从网上找到了一个开源免费的数据库开发工具--sqlite, 网上的关于sqlite的介绍有很多,详细见官方网站:http://www.sqlite.com.cn/ . 我发现sqlite正是我需要的. 总结一下几个特点:
1. 开放源代码
2. 程序特别小,在windows下应用程序sqlite.exe仅仅200kb以内。
3. 支持大多数sql指令,速度极快
4. 直接创建一个xxx.db, 就是一个数据库,不需要服务器支持
5. 简洁的C语言API接口

基于上面几点,足可以看出sqlite的强大和优异之处。源代码公开和程序特别小,甚至可以跨平台直接编译"gcc -o sqlite3 *",将这融合到潜入式系统是多么的美妙!

在ubuntu6.10平台安装sqlite3及其开发包:
#sudo apt-get install sqlite3 libsqlite3-dev

链接这篇文章介绍了sqlite的使用方法:
http://www.sqlite.com.cn/MySqlite/4/378.Html

下面是我总结的sqlite3与C接口的API
我用到的主要是下面几个函数(头文件sqlite3.h):
int sqlite3_open(const char*, sqlite3**); //打开一个数据库
int sqlite3_close(sqlite3*); //关闭
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);//执行
int sqlite3_get_table(sqlite3*, const char *sql,char***result, int *nrow,int *ncolumn ,char **errmsg );
//result中是以数组的形式存放所查询的数据,首先是表名,再是数据;
//nrow/ncolumn分别为查询语句返回的结果集的行数/列数,没有查到结果时返回0
sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.
sqlite3_errmsg() 则用来得到这些错误代码所对应的文字说明.

exec错误码
#define SQLITE_OK 0 /* Successful result */
#define SQLITE_ERROR 1 /* SQL error or missing database */
#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
#define SQLITE_PERM 3 /* Access permission denied */
#define SQLITE_ABORT 4 /* Callback routine requested an abort */
#define SQLITE_BUSY 5 /* The database file is locked */
#define SQLITE_LOCKED 6 /* A table in the database is locked */
#define SQLITE_NOMEM 7 /* A malloc() failed */
#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
#define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
#define SQLITE_SCHEMA 17 /* The database schema changed */
#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
#define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */
#define SQLITE_MISMATCH 20 /* Data type mismatch */
#define SQLITE_MISUSE 21 /* Library used incorrectly */
#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
#define SQLITE_AUTH 23 /* Authorization denied */
#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
应用实例:

定义
sqlite3 *db = NULL;
char * errMsg = NULL;
char sql_cmd[200];

打开文件:
int rc = sqlite3_open("xxx.db", &db);
if(rc) //打开失败
printf("Open database failed!\n");
else
printf("create the database successful!\n");

建立表格:
sprintf(sql_cmd,"CREATE TABLE datapro(package INTEGER,offset \
INTEGER,lklen INTEGER,base INTEHER,link INTEGER,err INTEGER);");
rc=sqlite3_exec(db,sql_cmd,0,0,&eMsg); //建立表datapro
if(rc==SQLITE_OK) //建表成功
printf("create the chn_to_eng table successful!\n");
else
printf("%s\n",eMsg);
添加数据:
sprintf(sql_cmd,"INSERT INTO datapro VALUES(%d,%d,%d,%d,%d,%d);",4,2345,268,9,3,3);
rc=sqlite3_exec(pro_db,pro_sqlcmd,0,0,&eMsg);

查询:
int nrow=0, ncolumn=0;
char **azResult; //存放结果
sql="SELECT * FROM datapro";
sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&eMsg);
//其中nrow为行数,ncolum为列数
printf("\nThe result of querying is : \n");
for(int i=1;i<nrow+1;i++)
{
for(int j=0;j<ncolumn;j++)
printf("%s ",azResult[i*ncolumn+j]);
printf("\n");
}

删除:
sprintf(sql_cmd,"DELETE FROM datapro WHERE package=1;") ;
rc=sqlite3_exec(db,sql,0,0,&eMsg);


分享到:
评论

相关推荐

    sqlite3 C语言接口

    讲解sqlite3的C语言接口,包括预处理语法

    SQLite_C语言接口.pdf

    SQLite_C语言接口.pdf

    SQLite_C语言接口

    SQLite_C语言接口,好资料,免费奉送!免费的才是真正的共享!

    C语言如何调用SQLite3中的接口

    这里有如何建立SQLite3的环境,以及如何调试SQLite3中接口的例子和Makefile文件内容

    linux下C语言操作sqlite3数据库封装

    linux下c语言操作sqlite3数据库,有sqlite3动态库、sqlite3的源码安装包、c语言操作sqlite3数据库的封装函数。保证C语言能够正常对sqlite3进行增、删、改、查操作。已经在多个项目上使用,绝对可行。

    SQLITE3接口函数与数据库

    使用sqlite3提供的接口使用C语言去实现对数据库的操作。

    SQLite的C++接口

    一.准备工作 2 二.核心对象和接口 2 1.核心对象 2 2.核心接口 2 1.sqlite3_open 2 2.sqlite3_close 2 3.sqlite3_exec 2 4.sqlite_errmsg 3 三.示例代码-C语言 4 1.链接数据库student.db...四.SQLite接口的C++封装 8

    sqlite3操作接口程序,供参考

    c实现的sqlite3接口程序,实现数据库创建\数据表创建\数据修改\数据表删除\数据表修改\数据表是否存在判断\查看数据表节点个数等等功能.希望能对大家项目开发中数据操作有所帮助.

    sqlite3.c源码

    sqlite3.c sqlite3.h sqlite数据C语言接口源码

    sqlite3数据库操作类

    并用C语言格式导出C接口供C语言的调用; 即本程序是C语言、C++兼容 本程序所使用的Makefile文件由本人创作(注释详细),可支持动态库编译、静态库编译等等,经过长时间优化积累,可通过简单修改参数适用于绝大部分...

    sqlite3增删改查C++接口实现

    int MYDLL open_db(); int MYDLL create_table(); int MYDLL drop_table(); int MYDLL insert_data(int id, char *name, int age); int MYDLL search_data(int id); int MYDLL search_data(char *name);...

    Sqlite3对于2进制数据的操作。

    里面对于Sqlite3数据库2进制数据进行了详细的解析和对于大部分常用Sqlite3的接口函数做了一定的总结。对于2进制数据eg图片的操作有实例源代码提供。

    在linux环境下,用SQLITE存储数据,并通过HTTP,以JSON格式发送到服务器

    在linux环境下,用SQLITE存储数据,并通过HTTP,以JSON格式发送到服务器。

    c/c++ sqlite3示例

    c++的sqlite3接口.如果是c语言的话把函数参数传引用的地方的引用去掉即可,返回时返回指针就OK了.在linux环境下调试OK.里面有个示例Makefile及相应的源码.Makefile要根据个人机器上的sqlite3的头文件及动态库的存放...

    sqlite3.h数据库头文件

    这个头文件定义SQLite库呈现给客户端程序的接口。如果c函数、结构、数据类型或常量定义没有出现在这个文件中,那么它不是SQLite发布的API,可以在不通知的情况下进行更改,并且不应该被使用SQLite的程序引用。

    SQLite参考手册.zip

    它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比...

    基于linux下C语言编程操作数据库(sqlite3)(酒店管理系统且含报告)

    C语言中通过调用 sqlite 的函数接口来实现对数据库的管理(创建数据库、创建表格、插入数据、查询数据、修改数据、删除数据等),掌握sqlite数据库的语法。共有五张表,包含酒店管理系统想项目报告。代码简单易懂,...

    Sqlite_嵌入式数据库移植和使用.doc

    Sqlite 嵌入式数据库移植和使用 sqlite是一个功能强大、体积小运算速度快的嵌入式数据库,采用了全C语言封装,并提供了八十多个命令接口,可移植性强,使用方便。

    SQLite教程(十四):C语言编程实例代码(2)

    SQLite作为一种简单灵活的嵌入式数据库也同样提供了该功能,但是实现方式并不像其他数据库那样方便明显,它只是通过一种隐含的技巧来达到批量插入的目的,其逻辑如下:  1). 开始一个事物,以保证后面的数

    sqlite数据库学习.doc

    Linux,sqlite3数据库操作的各种命令以及使用C/C++编程接口实现对数据库的操作,学习文档

Global site tag (gtag.js) - Google Analytics