转载: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(1);}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 + 1)*ncols;for (i = 0; i < tr; ++i) //输出查询结果
    {printf("results[%d]= %s/n", i, results[i]); //此处可以自己定义输出格式,
    }sqlite3_free_table(results); //free
    sqlite3_close(db);getchar();return 0;
}

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不能做的都是它所能做的直接结果。

它开始的设计就是一款模块化、简单、紧凑的以及易于使用的嵌入式关系数据库,它的基础代码都在使用它的程序员的掌握范围内。

从多方面看,它能完成许多其他数据库不能做的事情,例如,运行在电力消耗实际上是一项制约因素的嵌入式环境中。

转载于:https://www.cnblogs.com/chechen/p/7356010.html

C++ VS2013环境编译使用sqlite数据库全过程相关推荐

  1. Win7 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  2. python建立sqlite数据库_python sqlite3 创建数据库

    Python标准库14 数据库 (sqlite3) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关 ...

  3. sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件

    由于工作需要,最近一周以来研究sqlite数据库文件的解密方法.最终采用sqlcipher工具进行解密.由于sqlcipher的实现大多是支持android的,修改为纯java平台下的代码有难度,因此 ...

  4. 【OpenCV3】OpenCV3.2.0在VS2013环境下Cmake编译与快速配置

    近年来随着人工智能和机器视觉的日益火爆,OpenCV作为机器视觉领域内的利器也得到了长足和快速的发展.作为OpenCV的忠实粉丝,一直使用的是OpenCV2的版本,但是OpenCV3相对于OpenCV ...

  5. android入门基础笔记,Sqlite数据库下载

    * 移动通讯技术的发展: 第一代通讯技术:模拟信号 工作频段   缺点:保密性差 第二代通讯技术: 体积越来越小  数字信号(加密)   短信  彩信 第三代通讯技术: 数字信号   可处理图像.音乐 ...

  6. 在 Android 应用程序中使用 SQLite 数据库以及怎么用

    part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...

  7. ocbase 数据库 蚂蚁_iOS - OC SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  8. android 访问sqlite,android中访问已有的sqlite数据库

    推荐文章 每天进步记录一点点 话说经常性的操作svn出现各种问题,而度娘一直帮倒忙,是不是很手足无措. 有时问题还是要记录下来的.说不定还会有惊喜. 昨天遇到个问题,搜索了一下,发现第一条就是自己写的 ...

  9. iOS - OC SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

最新文章

  1. es6 的数组的方法
  2. 更改printk打印级别【转】
  3. .NET Core整合log4net以及全局异常捕获实现2
  4. 【转载】现代浏览器的工作原理
  5. SAP Spartacus默认的货币列表currency是从源代码什么地方读取的
  6. C# JSON格式数据用法
  7. html:(39):块级元素和内联块级元素
  8. JDBC数据库编程:callableStatement接口
  9. 星尘小组第十一周翻译-设计和优化索引
  10. oracle 存储过程深入学习与应用
  11. mysql启动pid文件位置_msyql 启动报错 找不到pid 文件
  12. 机械振动的傅里叶变化分析技术
  13. 我承认我不曾历经沧桑 (蒋方舟)
  14. LOJ 6131 Fiend - 行列式 - 可并堆 - 贪心
  15. 13.2 用Patsy创建模型
  16. 软件开发十三种文档格式
  17. drill down roll up
  18. ReID:通用性能评价标准
  19. yaf 修改php.ini,Yaf的配置
  20. 校园学校排课选课系统 毕业设计毕设源码毕业论文开题报告参考(5)网站系统管理功能

热门文章

  1. 2022-2028年中国数据中台行业深度调研及投资前景预测报告(全卷)
  2. 2022-2028年中国乙酸钴行业发展现状调研及市场前景规划报告
  3. java操作跨页的word cell,“excle如何打印不出现断行“EXCEL中,如何不跨页断行打印或显示,谢谢...
  4. GCC 在 Linux、Windows 系统安装
  5. 经典笔试上机考题-表达式求值
  6. 最新SOTA模型和实现代码
  7. nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型
  8. tf.placeholder函数说明
  9. 从PyTorch到ONNX的端到端AlexNet
  10. 视频处理器为电池供电的设计提供4K视频编码