VC++以DLL方式加载和使用SQLite数据库

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,代码如下:

[cpp]  view plain  copy
  1. #include "stdafx.h"  
  2. #include "sqlite3.h"  
  3. #pragma comment(lib, "sqlite3.lib")  
  4.   
  5. void print_row(int n_values, char** values)  
  6. {  
  7.     for (int i = 0; i < n_values; ++i)  
  8.         printf("%10s", values[i]);  
  9.     printf("\n");  
  10. }  
  11.   
  12. int print_result(void* data, int n_columns, char** column_values, char** column_names)  
  13. {  
  14.     static int column_names_printed = 0;  
  15.     if (column_names_printed++ == 0)  
  16.         print_row(n_columns, column_names);  
  17.     print_row(n_columns, column_values);  
  18.     return 0;  
  19. }  
  20.   
  21. int _tmain(int argc, _TCHAR* argv[])  
  22. {  
  23.   
  24.     sqlite3 *db = NULL;  
  25.     char *errMsg = NULL;  
  26.     int rc = sqlite3_open("test.db", &db);  
  27.     if( rc )  
  28.     {  
  29.         fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));  
  30.         sqlite3_close(db);  
  31.         getchar();  
  32.         return 0;  
  33.     }  
  34.     else  
  35.         printf("open test.db successfully!\n");  
  36.   
  37.     rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);  
  38.     rc = sqlite3_exec(db, "CREATE TABLE students(number varchar(10), name varchar(10), "  
  39.             "sex varchar(6), age varchar(2));", NULL, NULL, NULL);  
  40.     rc = sqlite3_exec(db, "INSERT INTO students VALUES('00001','Mary','female','15');"  
  41.             "INSERT INTO students VALUES('00002', 'John', 'male', '16');",  
  42.                         NULL, NULL, &errMsg);  
  43.     rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';",  
  44.                         print_result, NULL, &errMsg);  
  45.     rc = sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';",  
  46.                         print_result, NULL, &errMsg);  
  47.     rc = sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);  
  48.   
  49.     printf("error code: %d\n", rc);  
  50.     printf("error message: %s\n", errMsg);  
  51.   
  52.     sqlite3_close(db);  
  53.   
  54.     getchar();  
  55.     return 0;  
  56. }  

6、编译后,如代码所写,工程目录下会生成test.db数据文件,说明SQLite正常使用了


四、结束语

文章讲述如何在Windows下以DLL方式加载和使用SQLite数据库。如果想以静态库的形式把SQLite集成到程序中,可以参考Windows下编译和使用SQLite数据库,对这个问题我也做过讨论。

猜你喜欢

转载自blog.csdn.net/thanklife/article/details/80417487