到谷歌上搜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 学习的更多相关文章

  1. SQLite学习笔记(七)&&事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  2. Sqlite学习笔记(四)&&SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  3. SQLite学习手册(目录)

    链接地址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...

  4. Sqlite学习笔记(四)&&SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  5. SQLite学习手册

    在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特 ...

  6. SQLite 学习笔记

    SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite. ...

  7. SQLite学习手册(转)

    原文网址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...

  8. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  9. SQlite 学习资料

      很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFo ...

  10. sqlite学习

    一鼓作气,今天继续学习了sqlite数据库在Xcode上的一些操作,主要是通过用oc代码进行salite表格的创建,删除,修改:以及对现有的表格数据进行增,删,改,查.虽然有点累,但是收获不小,感觉很 ...

随机推荐

  1. HDU 5904 LCIS

    $dp$. 这题的突破口在于要求数字是连续的. 可以分别记录两个串以某个数字为结尾的最长上升长度,然后枚举一下以哪个数字为结尾就可以得到答案了. 因为$case$有点多,不能每次$memset$,额外 ...

  2. RSA算法记录----摘抄

    RSA算法原理(一)   "公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先简单介绍一下,什么 ...

  3. CentOS 6.5的安装详解

    CentOS 6.5的安装详解 主流: 目前的Linux操作系统主要应用于生产环境, 主流企业级Linux系统仍旧是RedHat或者CentOS 免费: RedHat 和CentOS差别不大,Cent ...

  4. ios开发判断手机是否安装微信app

    1.代码如下 if ([WXApi isWXAppInstalled]) 2.如果以上代码无效,请在plist文件中添加如下内容

  5. spring Bean的三种注入方式

    1.构造函数注入: 构造函数的注入方式分为很多种 (1)普通构造函数,空参数的构造函数 <bean id="exampleBean" class="examples ...

  6. 【实验室笔记】C#以本地时间创建txt文件

    前段时间做的一个小项目,要求上位机在打开时候,以打开软件的系统时间的建立一个txt文件来存储下位机发送来的数据. 在第一版上位机上,取名的办法太弱了,先是读取系统时间,然后截取字符串,太笨拙.昨天,查 ...

  7. Linux 虚拟机性能监控

    性能监控工具 perf kvm 为了在主机中使用perf kvm,您必须访问/ proc / modules和/ proc / kallsyms文件."复制/ proc文件从guest虚拟机 ...

  8. JavaScript DOM编程艺术-学习笔记(第八章、第九章)

    第八章 1.小知识点: ①某些浏览器要根据DOCTYPE 来决定页面的呈现模式(标准模式 / 怪异模式--也称兼容模式): 兼容模式意味着浏览器要模仿老一辈的浏览器的怪异行为,来让老站点得到运行,并让 ...

  9. MUI判断网络连接以及监听网络变化JS

    来源:netChange问题:怎么判断网络状态 MUI用于获取当前设备的网络类型 function plusReady(){ var types = {}; types[plus.networkinf ...

  10. Gdiplus 贴图(助记) -------------------拖动整个对话框

    最简单的两种方法: 一.使WM_NCHITTEST始终返回HTCAPTION,也就是欺骗系统让他以为这是菜单栏. LRESULT CDemoDlg::OnNcHitTest(CPoint point) ...