到谷歌上搜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. CentOS 6.5 部署Unison双向同步服务

    环境介绍: 服务器 IP Server1 192.168.30.131 Server2 192.168.30.132       1.添加主机互信: a.添加host文件(在Server1.Serve ...

  2. apache 配置静态文件缓存和开启gzip压缩

    1,设置文件静态缓存3天: 在httpd.conf 里添加如下代码: #文件静态缓存配置 <IfModule expires_module> #打开缓存 ExpiresActive on ...

  3. 个性化推荐系统中的BadCase分析

    针对内测用户反馈,由于前一天点击了几个动画,导致第二天推荐的动画屏占比较高,于是开始对此badcase进行分析. 首先分析了该用户的历史观看纪录,由于系统升级,日志缺陷问题,导致该用户10.15-11 ...

  4. flex 4 datagrid 奇偶行颜色设置

    <s:DataGrid width="100%" height="100%" alternatingRowColors="[#ffFFff,#e ...

  5. Java Socket编程基础(1)

    参考资料: <Java网络编程精解> 孙卫琴 一.socket通信简介 什么是socket,简单来说,在linux系统上,进程与进程之间的通信称为IPC,在同一台计算机中,进程与进程之间通 ...

  6. Ubuntu 16.04安装和配置Sublime Text 3

    1.安装Sublime Text 3 首先添加sublime text 3的仓库: sudo add-apt-repository ppa:webupd8team/sublime-text-3 根据提 ...

  7. div显示与隐藏及height()函数

    总结与网络 1. $("#id").show()表示display:block,$("#id").hide()表示display:none; $("# ...

  8. Atomic 升级

    Atomic 采用类似github的版本管理,  可以使用以下命令升级 ostree remote add --set=gpg-verify=false atomic20160212 http://. ...

  9. linux 启动 关闭 防火墙

    开启防火墙: systemctl start firewalld 关闭防火墙: systemctl stop firewalld

  10. iOS项目导航栏返回按钮

    最近iOS项目中要求导航栏的返回按钮只保留那个箭头,去掉后边的文字,在网上查了一些资料,最简单且没有副作用的方法就是 [[UIBarButtonItem appearance] setBackButt ...