`
cwqcwk1
  • 浏览: 86929 次
文章分类
社区版块
存档分类
最新评论

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

#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数据库,对这个问题我也做过讨论。

分享到:
评论

相关推荐

    vs2003编译通过的sqlite3.6.12源码

    在给定的资源中,“vs2003编译通过的sqlite3.6.12源码”意味着我们可以获得SQLite数据库引擎的特定版本(3.6.12)的源代码,该版本已经在Windows环境下使用Visual Studio 2003开发工具成功编译过。 Visual Studio ...

    让Sqlite脱离VC++ Runtime独立运行的方法

    Sqlite依赖于VC++运行时库,对于没有安装VC++运行时的机器,运行包含Sqlite的应用程序会遇到错误,例如无法加载SQLite.Interop.DLL,导致应用程序无法启动。这在.NET项目中尤为常见,因为虽然.NET Framework可能已...

    VC++ 使用TWAIN协议实现扫描仪完整源码

    `MyTwain.sdf`可能是一个SQLite数据库文件,用于存储扫描设置或者其他相关信息。`MyTwain`可能是源代码文件夹,包含实现TWAIN功能的C++源代码。 在实际应用中,使用TWAIN协议进行扫描通常包括以下几个步骤: 1. **...

    vc++ 应用源码包_1

    SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器...

    vc++ 应用源码包_6

    SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器...

    vc++ 应用源码包_5

    SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器...

    vc++ 应用源码包_2

    SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器...

    vc++ 应用源码包_3

    SkinMagic 2.21 动态库版本的使用和 Skin++动态库及静态库版本的使用。 VC++精仿QQ2008窗体及分类菜单 VC++卡通风格气泡提示源码 VC++实现任务管理器源码 任务管理器应该大家都很熟悉,论坛里也有好多的任务管理器...

    vc++ 开发实例源码包

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    python-3.12.0-embed-win32.zip

    5. **sqlite3.dll**:这是SQLite数据库引擎的动态链接库,Python标准库中的`sqlite3`模块就是依赖这个库来处理SQLite数据库操作。 6. **vcruntime140.dll**:这是Microsoft Visual C++运行时库的一部分,用于支持...

    python-3.12.0a2-embed-amd64.zip

    5. `sqlite3.dll`:SQLite数据库引擎的动态链接库,Python标准库中的`sqlite3`模块依赖此库来处理SQLite数据库。 6. `vcruntime140.dll` 和 `vcruntime140_1.dll`:这是Microsoft Visual C++运行时库的一部分,...

    在win10里顺利安装了apache2.4.41和php7.4.29

    `libsqlite3.dll`是SQLite数据库引擎的动态链接库,如果PHP配置了SQLite支持,这个文件就很重要。`libssl-1_1-x64.dll`和`libcrypto-1_1-x64.dll`是OpenSSL库,用于HTTPS和其他加密功能。 8. **测试与故障排查**:...

    python-3.11.0-embed-arm64.zip

    5. **sqlite3.dll**:SQLite数据库引擎的动态链接库,Python标准库的一部分,允许在Python程序中本地存储数据。 6. **libssl-1_1-arm64.dll**:与libcrypto类似,这是OpenSSL的另一个组件,主要用于安全套接层(SSL)...

Global site tag (gtag.js) - Google Analytics