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 ...
随机推荐
- IRC and security tools
login::: /msg NickServ identify <password>. join::: /join #metasploit 浏览器: Tor操作系统: Tails加 ...
- Is It A Tree?----poj1308
http://poj.org/problem?id=1308 #include<stdio.h> #include<string.h> #include<iostream ...
- Elasticsearch教程-从入门到精通(转)
原文:http://mageedu.blog.51cto.com/4265610/1714522?utm_source=tuicool&utm_medium=referral 各位运维同行朋友 ...
- xpath教程 2 - lxml库
xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...
- ssh stricthostkeychecking=0
SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击. 但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查. ...
- 十天精通CSS3(3)
颜色之RGBA RGB是一种色彩标准,是由红(R).绿(G).蓝(B)的变化以及相互叠加来得到各式各样的颜色.RGBA是在RGB的基础上增加了控制alpha透明度的参数. 语法: color:rgba ...
- fish shell 下gopath的设置问题
GOPATH可以设置多个工程目录,linux下用冒号分隔(必须用冒号,fish shell的空格分割会出错),windows下用分号分隔,但是go get 只会下载pkg到第一个目录,但是编译的时候会 ...
- Chrome插件汇总
Chrome浏览器可以增加很多插件,帮助我们更方便地使用. 1 重新定位新标签页 名字:Infinity.crx 官网:http://www.infinitynewtab.com/ 效果图如下: ...
- 实习培训——Java基础(4)
实习培训——Java基础(4) 1 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,多态性是对象多种表现形式的体现. 现实中,比如我们按下 ...
- http协议基础(四)http状态码
一:http状态码 表示客户端http请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作 状态码的类别如下: http状态码种类繁多,大概有60多种,实际上经常使用的只有14种,下面为一 ...