转载两篇:在Visual Studio中使用sqlite

Visual Studio 中使用 SQLite

『SQL』SQLite在Visual Studio 2013下的简单使用

工程中要用到的三个文件sqlite3.lib,sqlite3.dll,sqlite3.h

Visual Studio 中使用 SQLite

三个参考链接:

http://www.cnblogs.com/likebeta/archive/2012/06/14/2549923.html

http://blog.csdn.net/zljjava/article/details/7741017

http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html

一个官网下载链接:

http://sqlite.org/download.html

从官网上下载下面两个文件,可能版本号不同

sqlite-amalgamation-3150100.zip

sqlite-dll-win32-x86-3150100.zip

解压得到所需的三个文件

sqlite3.h

sqlite3.def

sqlite3.dll

使用def生成lib文件

第一种方法

第一步:找到lib.exe所在目录

一般都在X:\Program Files\Microsoft Visual Studio\VC98\Bin下,在“运行”中输入cmd,然后切换到该目录下

第二步:使用LIB命令生成.lib文件

很多网页上都介绍,使用LIB /DEF:sqlite3.def /machine:IX86即可生成,可是我使用它时遇到一些小问题。

这里就不说了,说说应该注意的几点问题吧。第一个,你的sqlite3.def要是没有在 X:\Program Files\Microsoft Visual Studio\VC98\Bin下,需要写全路径;第二,为了清楚起见,你需要注明.lib文件的输出路径。下面我给出一个完整的命令行:X:\Program Files\Microsoft Visual Studio\VC98\Bin>LIB /out:D:\test\sqlite3.lib /MACHINE:IX86 /DEF:D:\test\sqlite3.def,然后在X:\test\e中可以找到sqlite3.lib和sqlite3.exp

如果生成的过程中提示缺少文件,去vc安装目录搜索,复制到lib.exe文件下就行了。

第二种方法

直接在visual studio当中调出命令行

让后再命令行中跳转到头文件,.def和.dll中直接生成sqlite3.def

为了让多个项目能够使用sqlite,我将最后需要的三个文件sqlite3.lib,sqlite3.dll,sqlite3.h分别放在了软件安装目录的lib,bin,include文件夹下(必须添加到自己的项目中,才能在别人的电脑上运行)。


需要使用时,添加下面的代码即可

#include "sqlite/sqlite3.h"
#pragma comment(lib,"sqlite/sqlite3.lib")
sqlite3* db;
	int nResult = sqlite3_open16(dbPath, &db);
	if(nResult != SQLITE_OK) {
		TRACE(L"打开数据库失败:%s\n", sqlite3_errmsg16(db));
	} else {
		TRACE(L"数据库打开成功\n");
	}
	char* errmsg;
	nResult = sqlite3_exec(db, "create table fuck(id integer primary key autoincrement,name varchar(100))", NULL, NULL, &errmsg);
	if(nResult != SQLITE_OK) {
		sqlite3_close(db);
		TRACE(L"创建表失败:%s\n", sqlite3_errmsg16(db));
		return ;
	}
	CString strSql;
	for(int i = 0; i < 15; i++) {
		strSql += L"insert into fuck values(null,'hehe');";
	}
	TRACE(L"strSql:%s\n", strSql);
	nResult = sqlite3_exec(db, UnicodeToAnsi(strSql), NULL, NULL, &errmsg);
	if(nResult != SQLITE_OK) {
		sqlite3_close(db);
		TRACE(L"插入数据失败:%s\n", sqlite3_errmsg16(db));
		return ;
	}
	return ;

『SQL』SQLite在Visual Studio 2013下的简单使用

什么是SQLite?

SQLite是一个轻量级的数据库,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合。SQLite直接访问其存储文件。

SQLite的优点

不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite不需要配置,这意味着不需要安装或管理。
一个完整的SQLite数据库是存储在一个单一的跨平台的磁盘文件。
SQLite是非常小的,是轻量级的,完全配置时小于400KB,省略可选功能配置时小于250KB。
SQLite是自给自足的,这意味着不需要任何外部的依赖。
SQLite事务是完全兼容ACID的,允许从多个进程或线程安全访问。
SQLite支持SQL92(SQL2)标准的大多数查询语言的功能。
SQLite使用ANSI-C编写的,并提供了简单和易于使用的API。
SQLite可在UNIX(Linux、Mac OS-X、Android、iOS)和Windows(Win32、WinCE、WinRT)中运行。

SQLite的下载

官网下载地址

本篇博客使用的SQLite头文件
提取码:gxlt

本篇博客使用的SQLite动态库
提取码:t35y

注意:本篇博客是在Visual Studio 2013下使用SQLite的教程。

SQLite的配置

  • 下载下来后,全部解压

在D盘新建一个文件夹sqlite3

打开刚才解压得到的两个文件夹,将sqlite-dll-win32-x86-3290000文件夹中的sqlite3.def和sqlite.dll拷贝到D盘的sqlite3文件夹中,将sqlite-amalgamation-3290000文件夹中的sqlite3.h文件拷贝到D盘的sqlite3文件夹中。

使用sqlite3.def生成sqlite3.lib文件

lib /out:D:\sqlite3\sqlite3.lib /MACHINE:IX86 /DEF:D:\sqlite3\sqlite3.def

生成成功

最后将sqlite3.lib、sqlite3.dll、sqlite3.h分别拷贝到软件安装目录的lib、bin、include文件夹下

使用的SQLite的时候添加下面两条语句即可

#include <sqlite3.h>
#pragma comment(lib, "sqlite3.lib")

输入以下代码进行测试

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

#pragma comment(lib,"sqlite3.lib")

int main(int argc, char* argv[])
{
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;

	rc = sqlite3_open("test.db", &db);

	if (rc){
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		exit(0);
	}
	else{
		fprintf(stderr, "Opened database successfully\n");
	}
	sqlite3_close(db);

	system("pause");
	return 0;
}

查询语句

#include <iostream>
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName) {
	int i;
	fprintf(stderr, "%s: ", (const char*)data);
	for (i = 0; i < argc; i++) {
		printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
	}
	printf("\n");
	return 0;
}

int main()
{
	sqlite3 *db;
	char *zErrMsg = 0;
	int rc;
	char *sql;
	const char* data = "Callback function called";


	rc = sqlite3_open("test.db", &db);

	if (rc) {
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		exit(0);
	}
	else {
		fprintf(stderr, "Opened database successfully\n");
	}
	sql = "SELECT * from sina where interval='5m' and datetime='2019-04-26 10:00:00'";
	rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);

	sqlite3_close(db);

}

查询主键

创建一个表engineers,有一个主键:engineer_id

CREATE TABLE engineers  
(
    engineer_id INTEGER,  
    engineerr_name VARCHAR NOT NULL,  
    address VARCHAR,  
    city VARCHAR,  
    CONSTRAINT engineers_pk PRIMARY KEY (engineer_id)  
);

之后查询表结构。表结构的最后一列为非零值的,代表是主键。下面的engineer_id是主键,是1,如果是复合主键,则会从2往下排。

pragma table_info('engineers');

发表评论