转载请注明出处:http://www.cnblogs.com/StartoverX/p/4660487.html
项目用到SQLite3,简单记录一下。
MySQL不同,SQLite3的数据库基于文件存放,不需要和服务器进程通信,直接通过API调用读取.db文件就可以读取数据库内容。
1.安装
ubuntu下直接apt-get即可:sudo apt-get install sqlite3 libsqlite3-dev
2.数据类型(DataType)
SQLite3有五中基本类型,分别是NULL、INTEGER、REAL、TEXT、BLOB。
NULL:空值。
INTEGER:带符号整型,根据值的大小以1,2,3,4,6或8字节存放
REAL:float实数类型,以8字节IEEE浮点数存放。
TEXT:值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放。
BLOB:只是一个数据块,完全按照输入存放(即没有准换),存储如图片、音视频等。
3.创建数据库
shell进入需要创建数据库文件的目录,直接sqlite3 test.db即可,查询databases,tables用.databases,.tables,查看帮助用.help。
4.C++ API
以上是最基本的sqlite3 c++ api,而我们最经常使用的就是sqlite3_open(),sqlite3_exec(),sqlite3_close()。sqlite3_exec()是对sqlite3_prepare(), sqlite3_step(), sqlite3_column(),和 sqlite3_finalize()的一个封装,完成了一个sql语句的执行和返回,举例如下:
注意callback为sqlite3_exec()的回调函数,而sqlite3_exec()的第三个参数会被传入callback的第一个参数中,由此实现与上下文的通信。
01 #include <stdio.h>
02 #include <sqlite3.h>
03
04 static int callback(void *arg, int argc, char **argv, char **azColName){ 05 int i; 06 for(i=0; i<argc; i++){ 07 printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 08 } 09 printf("\n"); 10 return 0; 11 } 12
13 int main(int argc, char **argv){ 14 sqlite3 *db; 15 char *zErrMsg = 0; 16 int rc; 17
18 if( argc!=3 ){ 19 fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]); 20 return(1); 21 } 22 rc = sqlite3_open(argv[1], &db); 23 if( rc ){ 24 fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); 25 sqlite3_close(db); 26 return(1); 27 } 28 rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); 29 if( rc!=SQLITE_OK ){ 30 fprintf(stderr, "SQL error: %s\n", zErrMsg); 31 sqlite3_free(zErrMsg); 32 } 33 sqlite3_close(db); 34 return 0; 35 }