转载地址:https://www.cnblogs.com/IamLoser/p/6648396.html https://baike.baidu.com/item/SQLite/375020
sqllite简介:
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
常用语法:
(1)创建数据库:sqlite3 xxx.db
(2)创建表
(3)删除表
(4)INSERT INTO语法
(5)SELECT语法
(6)WHERE语法
(7)UPDATE语法
(8)DELETE语法
linux C中编译方式:gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
主要函数:
(1)最重要的三个函数:
int sqlite3_open(const char*, sqlite3**);
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);
int sqlite3_close(sqlite3*);
还有2个:
const char *sqlite3_errmsg(sqlite3*);
void sqlite3_free(void*);
查看更多函数,下载sqlite源码包,只需要其中的sqlite3.c、sqlite.h即可。
(2)sqlite3_open 返回一个整数错误代码,=0 表示成功码,> 0都是错误码,详情看Sqlite3手册说明
函数用于打开/创建一个函数库
const char* 指定文件名,sqlite3** 指定数据库句柄,用户通过数据库句柄操作数据库
(2)sqlite3_exec返回0表示sql指令执行完毕,否则说明这次执行没有成功
函数用于执行一条或多条SQL语句,SQL语句之间用“;”隔开
sqlite3*指定已打开的数据库句柄,const char *sql 指定SQL指令,sqlite_callback 在回调函数中可以获得SQL执行的结果
void* 指定传给回调函数的数据 , char** 指定命令执行失败的详细错误信息
(3)回调函数
(4) sqlite3_close 关闭数据库文件,参数是数据库句柄
(5)sqlite3_errmsg 返回错误码所对应的文字说明,参数是数据库句柄
(6)sqlite3_free 释放存放错误信息的内存空间,sqlite3_errmsg 返回的errmsg必须用此函数释放
(7)简单测试代码
#include <stdio.h>
#include <sqlite3.h>
int callback(void *pv,int argc,char **argv,char **col)
{
int cnt_i = 0;
for(cnt_i =0;cnt_i < argc;cnt_i++)
{
printf("%s\t%s\n",col[cnt_i],argv[cnt_i]);
}
printf("\n");
return 0;
}
int main(void)
{
sqlite3 *db;
int result = 0;
char *rerrmsg = NULL;
char *sql = NULL;
char *data = "callback";
result = sqlite3_open("sample.db",&db);
if(result > 0)
{
printf("open database err:%s\n",sqlite3_errmsg(db));
return -1;
}
else
{
printf("open database successfully!\n");
sql = "CREATE TABLE STUDENT(" \
"NUM INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"SORCE REAL);";
result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
if(result != 0)
{
printf("creat table err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -2;
}
else
{
printf("create table successfully!\n");
sql = "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(1,'Paul',13,99.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(2,'Kate',15,94.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(3,'Jim',12,95.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(4,'Tom',13,99.4);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(5,'Jack',13,89.1);";
result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
if(result != 0)
{
printf("insert data err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -3;
}
else
{
printf("insert data successfully!\n");
sql = "SELECT * FROM STUDENT";
result = sqlite3_exec(db,sql,callback,(void *)data,&rerrmsg);
if(result != 0)
{
printf("select data err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -4;
}
else
{
printf("select data successfully!\n");
}
}
}
}
sqlite3_close(db);
return 0;
}
完!!