sqlite 学习
到谷歌上搜sqlite,第一项便是官方网站:www.sqlite.org。进去后,先了解一下大体,感觉还不错。
进入Document页面,大标题SQLite Programming Interfaces下有一些小标题,进入第一个标题SQLite In 5 Minutes Or Less,看到有一段简短而完整的c语言操作数据库的程序,感觉稍稍有些excited,心想,一会儿就跑这个鸟儿!接着又在document这儿逛了下···
进入下载页面,浏览了一个下载项,找我想要的windows版本的相关东东。看到大标题有一项:Precompiled Binaries For Windows,第一项是个shell command,让我联想起了MySql的那个command窗口(嘻嘻,我没怎么用过MySql,这是在学校学习的时候弱弱的玩过一下)。我想,这个应该是通往数据库的大门吧,下下来,运行,提示.help命令会显示帮助,显示出来不是特友好,在回到下载页面,看到对该下载项的描述:A command-line shell for accessing and modifying SQLite databases. This program is compatible with all versions of SQLite through 3.7.6 and beyond. 点那个command-line shell 链接,进去http://www.sqlite.org/sqlite.html页面,是个对shell command的简短的manual,从头到尾边看边练习,可以建表,感觉挺好的(呵呵,废话)。
下面就该调用sqlite的库,写个程序了。
把源码下下来(第一项便是),上面有这么一句话:This ZIP archive contains all C source code for SQLite 3.7.6.2 combined into a single source file (the amalgamation). 真扯!点了那个 amalgamation,似乎说是将n多个.c和.h文件用makefile整成了一个文件.c文件。不知道高人为啥这么做,反正给研究源码增加了难度。好了,无论怎样,源码还是有的,下下来,有四个文件shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h。那个shell.c就是shell command的源码了,暂时不用,那个sqlite3ext.h我也不想包含进来,所以就拷贝了sqlite3.c,sqlite3.h到一个新建的dll工程下面,将文件添加到工程中,编译,就知道会出错,错误是:fatal error C1853: 'Debug/sqlite.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)。看样子时跟预编译头文件有关系,在sqlite.c中包含以下"stdafx.h",也不好使。
网上查了下,大体说是这个文件时.c文件,预编译是对.cpp文件的,可以把该.c的预编译头文件设成No,步骤是:
右击该文件:Properties-->C/C++-->Precompiled Headers,将选项Create/Use Precompiled Header设为:Not Using Precompiled Headers即可。再编译,通过了。
至于预编译头文件是怎么一回事儿,这里就不多谈了,超出了本博客范围(其实本人还没彻底研究过,一般写书都这么说的,呵呵)。
心里正高兴着呢,一看,只有dll文件,没有lib文件。网上查了下,在一个论坛上找到了答案:http://www.sqlite.com.cn/bbs/topicdisp.asp?tid=720
有用信息如下:
SQLite官方下载只提供给我们一个sqlite3.dll跟一个sqlite3.def文件,并没有提供用于VC++6.0的lib文件,可以利用sqlite3.def文件生成,步骤如下: 1.将sqlite3.h(可从源码目录获得)拷贝到C:/Program Files/Microsoft Visual Studio/VC98/Include目录下,这时编译可通过,但链接错误,因为没有LIB文件 2.启动一个命令行程序,进入VC的安装目录C:/Program Files/Microsoft Visual Studio/VC98/Bin,在这个目录下面有一个LIB.exe文件,使用它就能生成sqlite3.lib文件,将sqlite3.def文件放到相同目录,或者绝对路径也可以, 然后在命令行输入如下命令: LIB /MACHINE:IX86 /DEF:sqlite3.def 该命令生成两个文件:sqlite3.lib和sqlite3.exp 运行该命令时,如果提示找不到MSPDB60.DLL文件,可从其它目录拷贝至Bin目录下 3.将生成的sqlite3.lib拷贝到Lib目录下,将sqlite3.dll拷贝到C:/WINNT/system32目录下 5.将sqlite3.lib加入到工程链接中,Project->Settings,Link选项卡,Object/library modules最后添入sqlite3.lib这时以下程序便可通过编译链接并运行。
不过这个是教给如何用dll和def文件生成lib文件的,看来download页面还有一个下载这两个文件的选项,那就是Precompiled Binaries For Windows大标题下的第二项,下下来,解压,果然就有sqlite3.dll和sqlite3.def两个文件。可是,我想编译源码来生成dl啊!
打开sqlite3.h一看,所有函数都不是导出函数,没有导出函数,就没有lib文件了。再仔细一看,所有函数前面加了个宏定义SQLITE_API,查看该宏,是个空,哈哈,将其定义为__declspec(dllexport),编译,还是没有.lib文件。原因是什么呢,前面说到sqlite.c是个用makefile生成的包含了所有源文件的文件,那就是说sqlite3.h根本没用到,查看sqlite.c,发现其开始出也有SQLITE_API的宏定义,
如下:
#ifndef SQLITE_API # define SQLITE_API #endif
将其改为:
#ifndef SQLITE_API # define SQLITE_API __declspec(dllexport) #endif
再编译,lib文件终于生成了!
下面该写一个test工程了,新建一个控制台工程,为了简单起见,将sqlite.dll,sqlite.lib,sqlite3.h都拷贝到test工程下面,在main()函数上面加上下面两行:
#include "sqlite3.h"
#pragma comment(lib, "sqlite.lib")
然后,就抄那个上面说到让我excited的程序,编译通过。运行的时候要用到之前读command shell manual的时候,按照上面建立的那个数据库,把ex1数据库拷贝到Debug目录下,在命令行下,运行:
test ex1 "select * from tbll"
结果显示:
one = hello!
two = 10
one = googdbye
two = 20
嘿嘿,至此,所有工作搞定!
周末,正好有时间,用博客记录下来,该去吃饭了!
哦,对了,我想高人把把多个文件弄成一个的好处就是编译sqlite源码的时候,我们只需要用到sqlite3.c即可,而使用sqlite类库的时候,我们就用到sqlite3.h就可以了... 呵呵,还是有点晕。。。
sqlite 学习的更多相关文章
- SQLite学习笔记(七)&&事务处理
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite学习手册(目录)
链接地址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理(转)
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite学习手册
在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特 ...
- SQLite 学习笔记
SQLite 学习笔记. 一.SQLite 安装 访问http://www.sqlite.org/download.html下载对应的文件. 1.在 Windows 上安装 SQLite. ...
- SQLite学习手册(转)
原文网址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...
- sqlite学习笔记7:C语言中使用sqlite之打开数据库
数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...
- SQlite 学习资料
很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFo ...
- sqlite学习
一鼓作气,今天继续学习了sqlite数据库在Xcode上的一些操作,主要是通过用oc代码进行salite表格的创建,删除,修改:以及对现有的表格数据进行增,删,改,查.虽然有点累,但是收获不小,感觉很 ...
随机推荐
- wpf 线程与界面线程
Thread thread = new Thread(new ThreadStart(() => { VisualTarget visualTarget = ...
- navicat导出数据结构及数据
右键选中数据库-->右键->数据传输->高级->选中所需导出的表->选择文件
- qwt的安装与使用
qwt简介 QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图. 具体介绍,可参看官方网址:http:/ ...
- linux命令之ifconfig详细解释
依赖于ifconfig命令中使用一些选项属性,ifconfig工具不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置. 1.命令格式: ifconfig [网络设备] [参数] 2.命令功能 ...
- 【JAVA】类继承对父类静态变量的操作
对静态变量的操作存在继承时还是有一些模糊,做了个简单的测试: class Test { private String mName; public Test(String name) { setName ...
- 可参考的gulp资源
可参考的gulp资源 入门:https://segmentfault.com/a/1190000000435599 比较详细:https://markpop.github.io/2014/09/17/ ...
- 2016NOMS全国运营峰会——史上更强嘉宾阵容提前揭晓!
参加2016NOMS全国运营峰会的演讲嘉宾来自运营领域的各个方面,包括用户运营.内容运营.活动运营.数据运营等.自大会消息一出立刻受到业界的广泛关注,并吸引了众多业内人士踊跃报名.日前,这一运营界峰会 ...
- Pelican主题配置:elegant
简介 elegant是Mac风格的优秀主题,简单,专注文章本身. A responsive, minimal, and stylish theme for Pelican:https://github ...
- Qt通过极光推送向app推送消息
简介 最近在做个项目,当客服端收到防盗的消息通知时向手机app推送一个消息,告知有防盗报警.这么小的功能没必要自己写个推送端,极光推送免费而且推送的成功率高,已经能满足我们的需求了. 极光推送的文档大 ...
- 设置ios中imageView图片自适应,
UIIimageView *imageView = [UIImageView alloc]init]; [imageView setContentScaleFactor:[[UIScreen mai ...