到谷歌上搜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. macos上安装wget命令

    首先从Apple Store下载Xcode,然后安装Xcode,接着安装Homebrew包管理,类似于Ubuntu下的apt-get: 终端下输入ruby -e "$(curl -fsSL ...

  2. VMware安装ubuntu,通过/mnt/hgfs 挂载共享Windows系统文件夹

    网上各种相关的配置说明,但是都没一个完整的,在这里楼主结合实战亲测,这一整套包含各种情况 1.安装VMware tools 2.解压到任意一个文件夹 tar -xzvf VMwareTools**** ...

  3. POJ 1952 BUY LOW, BUY LOWER

    $dp$. 一开始想了一个$dp$做法,$dp[i][j]$表示前$i$个数字,下降序列长度为$j$的方案数为$dp[i][j]$,这样做需要先离散化然后用树状数组优化,空间复杂度为${n^2}$,时 ...

  4. USACO 3.3 Riding the Fences

    Riding the Fences Farmer John owns a large number of fences that must be repaired annually. He trave ...

  5. CSS display:inline-block的元素特点:

    将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 在CSS中,块级对象元素会单独占一行显示,多个block元素会各自新起一行,并且可以设置width,h ...

  6. DUIlib使用Fastreport--报表简单使用

    fastreport是一个简单优秀的报表,fastreport更多是和delphi联合使用预览和打印数据的.我在开始使用duilib做项目时,打印和数据预览都是自己绘制的,这样不仅绘制麻烦费事费事,而 ...

  7. javaweb之session过期验证

    session过期判断的基本思想:用户登录成功后,将用户账号信息保存在session中,然后几乎每次执行命令都要经过过滤器,过滤器检查session中是否存在账号,若不存在, 则返回登录页面,反之正常 ...

  8. 织梦dedecms文章发布日期时间调用标签大全

    dedecms首页时间标签: 1.12-27 样式 [field:pubdate function='strftime("%m-%d",@me)'/] 2.May 15, 2012 ...

  9. 私有云Rabbitmq 集群部署

    默认openstack使用rabbitmq做信息队列,如果想要是云高可用,那么需要对每个涉及的组件都进行高可用配置,本文介绍如何使用rabbitmq 做高可用 高可用方法 通过 Erlang 的分布式 ...

  10. mac关机快捷键

    1.Ctrl + 关机:弹出关机提示 2.Ctrl + Option + 关机 : 正常关机快捷键 3.Command + Option + 关机 :进入休眠状态 4.Ctrl + Command + ...