到谷歌上搜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. Objective-C Runtime 运行时之五:协议与分类(转载)

    Objective-C中的分类允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到. Objective-C中的协议是普遍存在的 ...

  2. 解决mac-osx10.11下无法安装wxPython2.8-osx-unicode-2.8.12.1的问题

    在mac-osx10.11版本下,安装RIDE前提需要装wxPython2.8-osx-unicode-2.8.12.1库,但在安装wxPython过程中,会提示安装失败,以下提供一种解决方案 这里我 ...

  3. asp.net 如何引用dll

    这要看你引用dll文件是什么文件,是单纯的类库还是外部或自定义控件dll文件. 如果是类库dll文件,引用的步骤是这样的:在解决方案管理器中,选中要添加引用的项目或网站-右击-添加引用-选择要添加的d ...

  4. [SQL基础教程] 2-2 算数运算符和比较运算符

    [SQL基础教程] 2-2 算数运算符和比较运算符 算数运算符 四则运算 运算符 含义 + - * / SELECT col_1*2 AS col_new FROM table; 注意 所有包含NUL ...

  5. 运动框架实现思路(js)

    思路:速度.(改变left,right,width,height,opacity) 2.缓冲动画. 3.多物体运动. 4.任意值变化. 5.链式运动. 6.同时运动.

  6. Java多线程的信号量

    Java的信号量主要的作用是控制线程对资源的访问例如我一个线程池里面有100个线程等待执行,但是我允许最多同时运行5个线程,这5个线程只有其中一个线程执行完毕后,在线程池中等待的线程才能进入开始执行, ...

  7. C# 语言规范_版本5.0 (第10章 类)

    1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...

  8. Dynamic Programming - leetcode [动态规划]

    115. Distinct Subsequences 96. Unique Binary Search Trees 120. Triangle 123. Best Time to Buy and Se ...

  9. JS定时器设置、快速取消

    1.首先定义自己的方法 function test() { alert("开始"); } 2.在定时器中使用 setInterval("test()",1000 ...

  10. UIDatePicker 时间滚动表

    UIDatePicker *datapicker; //时间滚动表 datapicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(50, 200 ...