『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');