C++ VS2013环境编译使用sqlite数据库全过程
转载:http://www.cnblogs.com/imoon/archive/2012/11/30/2796726.html
转载:https://blog.csdn.net/hjm4702192/article/details/8283018(缺点)
转载:https://www.cnblogs.com/ccEmma/p/8308974.html (缺点)
知识补充:
sqlite3.dll动态链接库,它允许程序共享执行特殊任务所必需的代码和其他资源。
动态的sqlite3.lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的dll文件支持 。
静态的sqlite3.lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行。
任务:
一.使用VS2013编译sqlite3,生成动态的sqlite3.lib和sqlite3.dll(sqlite3.dll在官网中也可下载到)。在VS2013中编写简单程序,使用动态的sqlite3.lib和sqlite3.dll。
二.使用VS2013编译sqlite3,生成静态的sqlite3.lib。在VS2013中编写简单程序,使用静态的sqlite3.lib。
任务一:
1.在sqlite官网 http://www.sqlite.org/download.html 上下载sqlite-amalgamation-3270200.zip 和sqlite-dll-win32-x86-3270200.zip(我用的此版本)。
2.分别解压上述两个文件到各自文件夹下(sqlite3.def、sqlite3.dll在同一文件夹sqlite-dll下)。
3.从VS2013的安装目录下Microsoft Visual Studio 12.0\VC\bin找到lib.exe和link.exe,
从VS2013的安装目录下G:\Microsoft Visual Studio 12.0\VC\bin找到mspdb120.dll。
将lib.exe link.exe mspdb120.dll放到步骤2中的sqlite-dll文件夹下。
4.在D:\testdemo\sqlite-dll-win32-x86-3270200目录下,打开cmd窗口


5.输入命令:
LIB /DEF:sqlite3.def /machine:IX86
这时,在sqlite-dll-win32-x86-3270200文件夹下会出现sqlite3.lib。(这是动态的sqlite3.lib文件,只有896KB大小。)

6.在VS2013中编写简单程序。文件->新建->项目->Win32控制台应用程序,命名为Testsqlite 。
7.将main.cpp中的内容替换为以下代码:
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#pragma warning(disable:4996) #pragma comment(lib,"sqlite3.lib")
int main()
{
int rc;
int i, nrows, ncols, tr;
char *errmsg = NULL;
char **results; sqlite3 *db = NULL;
rc = sqlite3_open("demodb", &db);
if (rc)
{
fprintf(stderr, "can't open db!\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit();
}
else
{
printf("db open successfully!\n");
}
sqlite3_get_table(db, "select * from clients;", &results, &nrows, &ncols, &errmsg);
printf("DB has %d rows and %d cols\n\n", nrows, ncols);
tr = (nrows + )*ncols;
for (i = ; i < tr; ++i) //输出查询结果
{
printf("results[%d]= %s/n", i, results[i]); //此处可以自己定义输出格式,
}
sqlite3_free_table(results); //free
sqlite3_close(db); getchar();
return ;
}
8.将sqlite3.h、sqlite3.lib、sqlite3.dll复制到工程所在文件目录中

9.sqlite3.dll 和exe放到同一个目录
10.按F5键,运行成功。
备注:
1:SQLITE不可储存过多的数据库,它的性能发挥最好只能在存放较小的数据量情况下。不要把它当做MYSQL甚至ORACLE来使用。它只是一个200K的数据库。
2:sqlite3不像MYSQL那样使用固定日志文件,所有使用insert、update、delete的运行效率只是一般,sqlite3的一个事务,需要调用4次fsync()操作,而一般的大型数据库,如mysql只用到了2次。sqlite3对每个事务都创建一个临时文件来记录日志,这个日志创建、更新和删除竟然使用了3次fsync()!为什么不用一个固定的日志文件呢?实在难以理解设计者的思路。可能他们把重点放在"Select" 性能上吧。通过阅读sqlite3-3.5.1的源代码,发现作者也试图对这个问题进行修正,可能由于可靠性的原因,一直没有正式公布。
SQLite是为中小规模的应用程序设计的一个嵌入式的数据库
局限性一:
|
并发。SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。 写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。 SQLite已经采取措施以最小化排它锁所占用的时间。 通常来讲,SQLite中的锁只保持几毫秒。 但是按照一般经验,如果您的应用程序有很高的写并发(许多连接竞争向同一数据库写),并且是时间关键型,您可能需要其他数据库。 需要实际测试您的应用程序才能知道能获得怎样的性能。 一个简单的网络应用程序中,SQLite用100个并发连接每秒处理500多个事务。 事务所修改的记录数以及查询所涉及的复杂性可能有所不同。 什么样的并发性是可接受的,这取决于具体的应用程序,只能通过直接测试来判断。 总之,对任何数据库都是真理:直到您做了实际测试才能知道应用程序能获得怎样的性能。 |
局限性二:
|
网络。 虽然SQLite数据库可以通过网络文件系统共享,但是与这种文件系统相关的潜在延时会导致性能受损。 更糟的是,网络文件系统实现中的一些缺陷也使得打开和修改远程文件--SQLite或其他--很容易出错。 如果文件系统的锁实现不当,可能允许两个客户端同时修改同一个数据库文件,这样必然会导致数据库出错。 实际上,并不是因为SQLite的实现导致SQLite不能在网络文件系统上工作。 相反,SQLite在底层文件系统和有线协议下工作,但是这些技术有时并不完善。 例如,许多NFS使用有缺陷的fcntl(),这意味着锁可能并不像设想的那样工作。 一些较新版本的NFS,如Solaris NFSV4就可以工作正常,SQLite需要的锁机制也是相当可靠的。 然而,SQLite开发者既没有时间,也没有资源去验证任何给定的网络文件系统在所有的情况下都可以无缺陷工作。 |
局限说明:
|
绝大部分限制是有意设计的--它们是SQLite设计的结果。 例如,支持高度的写并发会带来很大的复杂性,这将使SQLite的简单性无法保持。 同样,作为嵌入式数据库,SQLite是有意不支持网络的。 这一点并不奇怪。总之,SQLite不能做的都是它所能做的直接结果。 它开始的设计就是一款模块化、简单、紧凑的以及易于使用的嵌入式关系数据库,它的基础代码都在使用它的程序员的掌握范围内。 从多方面看,它能完成许多其他数据库不能做的事情,例如,运行在电力消耗实际上是一项制约因素的嵌入式环境中。 |
C++ VS2013环境编译使用sqlite数据库全过程的更多相关文章
- Win7 64位 VS2013环境编译Squirrel 3.0.7
Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...
- Win7 VS2013环境编译Squirrel 3.0.7
Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...
- Win7 64位 VS2013环境编译Lua5.3.1
主要参考这篇文章,原文有几个错误顺便改正了. 在Windows下使用Visual Studio编译Lua5.3 写本文时Lua官方网站放出的新版本为5.3.1,然后我不知道为啥,神奇的国内不能访问Lu ...
- Win7 64位 VS2013环境编译CGAL-4.7
看到有人在QQ空间感叹编译CGAL配置折腾了一天时间,自己也想试试,虽然并不打算用,但感觉这库也挺有名的,想必日后用得着,于是着手试着编译. 首先是看一下官网的windows下配置说明 http:// ...
- Win7 64位 VS2013环境编译boost1_58_0
备忘,发现好多不常用的东西不记笔记再想用要重新花时间找,所以试着开始记笔记,写入博客吧. 首先去官网下最新的版本 http://www.boost.org/ 写本文时boost最新版本为1_58_0, ...
- Win7 VS2013环境编译Lua5.3.1
主要参考这篇文章,原文有几个错误顺便改正了. 在Windows下使用Visual Studio编译Lua5.3 写本文时Lua官方网站放出的新版本为5.3.1,然后我不知道为啥,神奇的国内不能访问Lu ...
- Win7 VS2013环境编译CGAL-4.7
看到有人在QQ空间感叹编译CGAL配置折腾了一天时间,自己也想试试,虽然并不打算用,但感觉这库也挺有名的,想必日后用得着,于是着手试着编译. 首先是看一下官网的windows下配置说明 http:// ...
- Win7 VS2013环境编译boost1_58_0
备忘,发现好多不常用的东西不记笔记再想用要重新花时间找,所以试着开始记笔记,写入博客吧. 首先去官网下最新的版本 http://www.boost.org/ 写本文时boost最新版本为1_58_0, ...
- C++连接sqlite数据库的坑
新的第一次用vs2013搞 C++连接sqlite数据库,遇到了很多问题,我也不搞不懂~~~下面写点小体会 首先: 你要先配置好sqlite的环境 参考链接: https://blog.csdn.ne ...
随机推荐
- 数据结构——栈(C语言实现)
#include <stdio.h> #include <stdlib.h> #include<string.h> #include<malloc.h> ...
- mysql unix domain socket and network socket, ssh key
当主机填写为localhost时mysql会采用 unix domain socket连接 当主机填写为127.0.0.1时mysql会采用tcp方式连接 这是linux套接字网络的特性,win平台不 ...
- Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...
- python-面向对象-09_类属性和类方法
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- python startswith() 函数
startswith() 作用:判断字符串是否以指定字符或子字符串开头 >>> s = "my name is ming" >>> >&g ...
- Core Data with Mantle
Mantle makes it easy to write a simple model layer for your Cocoa or Cocoa Touch application. Mantl ...
- DeepMind提出空间语言集成模型SLIM,有效编码自然语言的空间关系
前不久,DeepMind 提出生成查询网络 GQN,具备从 2D 画面到 3D 空间的转换能力.近日.DeepMind 基于 GQN 提出一种新模型.可以捕捉空间关系的语义(如 behind.left ...
- CSS表格(未完成)
CSS 表格 使用 CSS 可以使 HTML 表格更美观. 表格边框 指定CSS表格边框,使用border属性. 下面的例子指定了一个表格的Th和TD元素的黑色边框:
- SVN出现xcrun: error: invalid active developer path(Mac)
Mac升级了系统,配置PHPStorm的SVN,出现如下错误: 具体提示的内容是:xcrun: error: invalid active developer path (/Library/Devel ...
- weka源代码-总述
分类: 所有的分类器都继承自抽象类AbstractClassifier而AbstractClassifier继承自接口Classifier.集成关系如下图所示: 而类Classifier中主要包含以下 ...