Windows中SQLite的编译及编程

网上很多大牛其实都写了,这里只是为了记录自己的学习情况,顺便学习一下编译生成静态链接库,进入正题

开发环境:Windows 10+VS2013。

开发语言:C/C++。


首先,要在C程序中使用SQLite,则需要编译使用静态库.lib文件,然而官网只提供了sqlite3.dll和sqlite3.def文件,需要.lib才能使用。所以自己生成.lib文件。


下载sqlite-dll-win32-x86-3081002.zip和sqlite-amalgamation-201505200015.zip,前者包含sqlite3.dll和sqlite3.def文件,后者包含所需的头文件

下载地址http://www.sqlite.org/download.html

将上述压缩包解压到文件夹,如F:/SQLite

接着打开CMD命令行。执行以下命令

cd f:\sqlite\sqlite-dll-win32-x86-3081002

f:\sqlite\sqlite-dll-win32-x86-3081002> lib /DEF:sqlite3.def

或者直接在对应文件夹处打开命令行,如在文件夹sqlite-dll-win32-x86-3081002里面按shift + 鼠标右键,选择在此处打开命令窗口,然后输入lib /DEF:sqlite3.def,即可。

运行成功会有如下打印。


Microsoft (R) Library Manager Version 6.00.8168

Copyright (C) Microsoft Corp 1992-1998. All rights reserve


LIB : warning LNK4068: /MACHINE not specified; defaulting
   Creating library sqlite3.lib and object sqlite3.exp

注意:如果不成功。如果提示lib不是内部或者外部命令,则在vs2013的安装目录下拷贝 vc/bin/lib.exe 和link.exe到sqlite3目录下。如果提示缺少mspdb60.dll或者其他文件,则相应的找到拷贝到sqlite3目录下即可。


此时已经编译好了你要的静态链接库,即sqlite3.lib


接下来就是在相应的代码里引用了

创建win32控制台工程SQLiteTest。
sqlite3.h(在sqlite-amalgamation-3071300.zip压缩包中)添加到工程。
sqlite3.lib复制到工程文件夹下。
工程属性中添加sqlite3.lib库依赖。

项目---属性---链接器----输入-----在附加依赖项中添加sqlite3.lib


#include "stdafx.h"
#include "sqlite3.h" 
#include <iostream>  
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//打开路径采用utf-8编码  
	//如果路径中包含中文,需要进行编码转换  
	int rc = 0;
	int i = 0;
	sqlite3 *db = NULL;
	char *sql = NULL;
	char *err = NULL;
	rc = sqlite3_open("sqlite3test.db", &db);
	if (rc)
	{
		printf("\r\nopen database sqlite3test.db fail!\r\nERR: %s", sqlite3_errmsg(db));
		sqlite3_close(db);
		return -1;
	}
	printf("\r\nopen database sqlite3test.db ok!");


	sql = "create table stu(id int PRIMARY KEY,name text);";
	rc = sqlite3_exec(db, sql, NULL, NULL, &err);
	if (SQLITE_OK != rc)
	{
		if (NULL != err)
		{
			printf("\r\nSQL1 ERR:%s", err);
			sqlite3_free(err);
			return -1;
		}
	}

	sql = "insert into stu values (1, 'zhangsan');";
	rc = sqlite3_exec(db, sql, NULL, NULL, &err);
	if (SQLITE_OK != rc)
	{
		if (NULL != err)
		{
			printf("\r\nSQL2 ERR:%s", err);
			sqlite3_free(err);
			return -1;
		}
		printf("\r\n error insert");
	}
	sql = "insert into stu values (2, 'lisi');";
	rc = sqlite3_exec(db, sql, NULL, NULL, &err);
	if (SQLITE_OK != rc)
	{
		if (NULL != err)
		{
			printf("\r\nSQL2 ERR:%s", err);
			sqlite3_free(err);
			return -1;
		}
		printf("\r\n error insert");
	}

	sql = "select * from stu;";
	char **result;
	int nrow = 0, ncolumn = 0;
	rc = sqlite3_get_table(db, sql, &result, &nrow, &ncolumn, &err);
	if (SQLITE_OK != rc)
	{
		if (NULL != err)
		{
			printf("\r\nSQL3 ERR:%s", err);
			sqlite3_free(err);
			return -1;
		}
		printf("\r\n error select");
	}

	printf("\r\nrow: %d ,column: %d", nrow, ncolumn);

	for (i = 0; i<(nrow + 1)*ncolumn; i++)
	{
		printf("\r\n %s\t %s", result[i++], result[i]);
	}

	sqlite3_free_table(result);

	sqlite3_close(db);
	return 0;
}

以上代码参考http://blog.csdn.net/kikilizhm/article/details/8171685,基本没什么改动


至此就大功告成了,顺手把上面工程上传了,内含sqlite3.lib,sqlite3.h,可以下载直接使用,http://download.csdn.net/detail/u014038534/8729451


参考链接:http://blog.csdn.net/kikilizhm/article/details/8171685

http://blog.csdn.net/segen_jaa/article/details/7938959




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值