Sqlite3入门,安装和使用。

Win 7 + MSVC 2012 试用版

 

之所以用Sqlite,主要是因为,朋友不能在公司电脑上面安装东西,基于Mysql这种需要安装而且要起后台服务的程序自然都玩不了,那就Sqlite。

 

1、首先声明一下,完全没有必要安装,网上很多什么又是编译,又是什么生成lib的玩法,完全是绕路了(我觉得)。直接在工程里面把官方的C和H文件including进去就是了。我不知道其他人实际开发怎么玩的,有一点我知道,Qt的Sqlite3支持就是直接把源代码涵盖进去,而不是使用库再链接。

2、下载官网的源代码http://www.sqlite.com/download.html:

下载后,解压,如下:

  1. D:\Sqlite开发\源代码\sqlite-amalgamation-3071700>dir
  2.  Volume in drive D is D
  3.  Volume Serial Number is D8DC-109A
  4.  Directory of D:\Sqlite开发\源代码\sqlite-amalgamation-3071700
  5. 2013/05/22  09:09    <DIR>          .
  6. 2013/05/22  09:09    <DIR>          ..
  7. 2013/05/20  13:56            99,401 shell.c
  8. 2013/05/20  13:56         4,973,863 sqlite3.c
  9. 2013/05/20  13:56           348,618 sqlite3.h
  10. 2013/05/20  13:56            25,974 sqlite3ext.h
  11.                4 File(s)      5,447,856 bytes
  12.                2 Dir(s)  37,436,293,120 bytes free

3、新建一个VS空工程,路径:D:\Qt_Proj\Sqlite_cons1,代码在D:\Qt_Proj\Sqlite_cons1\Sqlite_cons1路径下面,此时还没有代码,把步骤2里面的sqlite3.c和sqlite3.h拷贝过来,然后添加一个main文件:source.cpp。

4、完成程序功能,也就是source.cpp的实现代码:

  1. #include <stdio.h>
  2. #include “sqlite3.h”
  3. static int callback(void *NotUsed, int argc, char **argv, char **azColName){
  4.     int i;
  5.     for(i=0; i<argc; i++){
  6.         printf(“%s = %s\n”, azColName[i], argv[i] ? argv[i] : “NULL”);
  7.     }
  8.     printf(“\n”);
  9.     return 0;
  10. }
  11. int main(){
  12.     sqlite3 *db;
  13.     char *zErrMsg = 0;
  14.     int rc;
  15.     rc = sqlite3_open(“./test.db”, &db);
  16.     if( rc ){
  17.         fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
  18.         sqlite3_close(db);
  19.         return(1);
  20.     }
  21.     rc = sqlite3_exec(db, “create table if not exists work (first integer primary key autoincrement, second text)”, callback, 0, &zErrMsg);
  22.     if( rc!=SQLITE_OK ){
  23.         fprintf(stderr, “SQL error: %s\n”, zErrMsg);
  24.         sqlite3_free(zErrMsg);
  25.     }
  26.     rc = sqlite3_exec(db, “insert into work(second) values (‘吃饭’)”, callback, 0, &zErrMsg);
  27.     if( rc!=SQLITE_OK ){
  28.         fprintf(stderr, “SQL error: %s\n”, zErrMsg);
  29.         sqlite3_free(zErrMsg);
  30.     }
  31.     rc = sqlite3_exec(db, “insert into work(second) values (‘asdf’)”, callback, 0, &zErrMsg);
  32.     if( rc!=SQLITE_OK ){
  33.         fprintf(stderr, “SQL error: %s\n”, zErrMsg);
  34.         sqlite3_free(zErrMsg);
  35.     }
  36.     sqlite3_close(db);
  37.     return 0;
  38. }

5、运行程序,会生成test.db:

6、这个时候我们用Sqlite shell工具查看效果:

  1. D:\Qt_Proj\Sqlite_cons1\Sqlite_cons1>Sqlite3 test.db
  2. SQLite version 3.7.17 2013-05-20 00:56:22
  3. Enter “.help” for instructions
  4. Enter SQL statements terminated with a “;”
  5. sqlite> .table
  6. work
  7. sqlite> select * from work;
  8. 1|│╘╖╣╟δ░┤
  9. 2|asdf
  10. sqlite>

上面有乱码,是因为我的cmd我修改了字体和显示,以至于不能显示中文了。

7、再说明一下,编译的文件里面一个是cpp的,而Sqlite3的实现文件是.c文件,没有关系的,在sqlite3.h里面有这么一段:

  1. #ifndef _SQLITE3_H_
  2. #define _SQLITE3_H_
  3. #include <stdarg.h>     /* Needed for the definition of va_list */
  4. /*
  5. ** Make sure we can call this stuff from C++.
  6. */
  7. #ifdef __cplusplus
  8. extern “C” {
  9. #endif

标签