SQLite是一款轻量级的本地数据库,使用时仅需占用很少的资源,支持Windows/Linux等主流系统,能同时跟很多程序语言结合,例如 C++、C#、PHP、Java等等。
本篇主要讲述如何在Windows下以DLL方式加载和使用SQLite数据库
一、准备资源
1、下载SQLite源代码:选择sqlite-amalgamation-X.zip,后面是版本号,这里用到源码中的头文件
2、下载SQLite提供的发布包,sqlite-dll-win32-x86-X.zip,后面是版本号,这里用到其中的dll文件和模版文件
二、编译过程
1、首先解压出sqlite-dll-win32-x86-X.zip,有2个文件,sqlite3.def、sqlite3.dll。虽然这里没有我们需要用到的静态库(sqlite3.lib),但我们可以编译sqlite的模块定义文件sqlite3.def 来得到这个文件。
2、打开vs命令行模式,如下键入命令“LIB /MACHINE:IX86 /DEF:sqlite3.def”,编译sqlite3.def得到sqlite3.lib
三、在项目中使用SQLite
1、新建一个win32 控制台应用程序,命名为sqlitetest
2、把sqlite3.h、sqlite3ext.h复制到工程目录下,并添加到工程项目中
3、把sqlite3.lib复制到工程目录下,编译程序过程需要到。
4、把sqlite3.dll复制到工程输出目录下,编译后的程序运行需要到。
5、修改sqlitetest.cpp,代码如下:
- #include "stdafx.h"
- #include "sqlite3.h"
- #pragma comment(lib, "sqlite3.lib")
- void print_row(int n_values, char** values)
- {
- for (int i = 0; i < n_values; ++i)
- printf("%10s", values[i]);
- printf("\n");
- }
- int print_result(void* data, int n_columns, char** column_values, char** column_names)
- {
- static int column_names_printed = 0;
- if (column_names_printed++ == 0)
- print_row(n_columns, column_names);
- print_row(n_columns, column_values);
- return 0;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- sqlite3 *db = NULL;
- char *errMsg = NULL;
- int rc = sqlite3_open("test.db", &db);
- if( rc )
- {
- fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
- sqlite3_close(db);
- getchar();
- return 0;
- }
- else
- printf("open test.db successfully!\n");
- rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
- rc = sqlite3_exec(db, "CREATE TABLE students(number varchar(10), name varchar(10), "
- "sex varchar(6), age varchar(2));", NULL, NULL, NULL);
- rc = sqlite3_exec(db, "INSERT INTO students VALUES('00001','Mary','female','15');"
- "INSERT INTO students VALUES('00002', 'John', 'male', '16');",
- NULL, NULL, &errMsg);
- rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';",
- print_result, NULL, &errMsg);
- rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';",
- print_result, NULL, &errMsg);
- rc = sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);
- printf("error code: %d\n", rc);
- printf("error message: %s\n", errMsg);
- sqlite3_close(db);
- getchar();
- return 0;
- }
6、编译后,如代码所写,工程目录下会生成test.db数据文件,说明SQLite正常使用了
四、结束语
文章讲述如何在Windows下以DLL方式加载和使用SQLite数据库。如果想以静态库的形式把SQLite集成到程序中,可以参考Windows下编译和使用SQLite数据库,对这个问题我也做过讨论。