Sqlite3入门,安装和使用。

来源:互联网 发布:java项目开发人员配置 编辑:程序博客网 时间:2024/06/04 19:05

 

Win 7 + MSVC 2012 试用版

 

之所以用Sqlite,主要是因为,朋友不能在公司电脑上面安装东西,基于Mysql这种需要安装而且要起后台服务的程序自然都玩不了,那就Sqlite。

 

1、首先声明一下,完全没有必要安装,网上很多什么又是编译,又是什么生成lib的玩法,完全是绕路了(我觉得)。直接在工程里面把官方的C和H文件including进去就是了。我不知道其他人实际开发怎么玩的,有一点我知道,Qt的Sqlite3支持就是直接把源代码涵盖进去,而不是使用库再链接。

2、下载官网的源代码http://www.sqlite.com/download.html

下载后,解压,如下:

D:\Sqlite开发\源代码\sqlite-amalgamation-3071700>dir Volume in drive D is D Volume Serial Number is D8DC-109A Directory of D:\Sqlite开发\源代码\sqlite-amalgamation-30717002013/05/22  09:09    <DIR>          .2013/05/22  09:09    <DIR>          ..2013/05/20  13:56            99,401 shell.c2013/05/20  13:56         4,973,863 sqlite3.c2013/05/20  13:56           348,618 sqlite3.h2013/05/20  13:56            25,974 sqlite3ext.h               4 File(s)      5,447,856 bytes               2 Dir(s)  37,436,293,120 bytes free


3、新建一个VS空工程,路径:D:\Qt_Proj\Sqlite_cons1,代码在D:\Qt_Proj\Sqlite_cons1\Sqlite_cons1路径下面,此时还没有代码,把步骤2里面的sqlite3.c和sqlite3.h拷贝过来,然后添加一个main文件:source.cpp。

4、完成程序功能,也就是source.cpp的实现代码:

#include <stdio.h>#include "sqlite3.h"static int callback(void *NotUsed, int argc, char **argv, char **azColName){    int i;    for(i=0; i<argc; i++){        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");    }    printf("\n");    return 0;}int main(){    sqlite3 *db;    char *zErrMsg = 0;    int rc;    rc = sqlite3_open("./test.db", &db);    if( rc ){        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));        sqlite3_close(db);        return(1);    }    rc = sqlite3_exec(db, "create table if not exists work (first integer primary key autoincrement, second text)", callback, 0, &zErrMsg);    if( rc!=SQLITE_OK ){        fprintf(stderr, "SQL error: %s\n", zErrMsg);        sqlite3_free(zErrMsg);    }    rc = sqlite3_exec(db, "insert into work(second) values ('吃饭')", callback, 0, &zErrMsg);    if( rc!=SQLITE_OK ){        fprintf(stderr, "SQL error: %s\n", zErrMsg);        sqlite3_free(zErrMsg);    }    rc = sqlite3_exec(db, "insert into work(second) values ('asdf')", callback, 0, &zErrMsg);    if( rc!=SQLITE_OK ){        fprintf(stderr, "SQL error: %s\n", zErrMsg);        sqlite3_free(zErrMsg);    }    sqlite3_close(db);    return 0;}


5、运行程序,会生成test.db:

6、这个时候我们用Sqlite shell工具查看效果:

D:\Qt_Proj\Sqlite_cons1\Sqlite_cons1>Sqlite3 test.dbSQLite version 3.7.17 2013-05-20 00:56:22Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> .tableworksqlite> select * from work;1|│╘╖╣╟δ░┤2|asdfsqlite>

上面有乱码,是因为我的cmd我修改了字体和显示,以至于不能显示中文了。

7、再说明一下,编译的文件里面一个是cpp的,而Sqlite3的实现文件是.c文件,没有关系的,在sqlite3.h里面有这么一段:

#ifndef _SQLITE3_H_#define _SQLITE3_H_#include <stdarg.h>     /* Needed for the definition of va_list *//*** Make sure we can call this stuff from C++.*/#ifdef __cplusplusextern "C" {#endif

 8、如果出现一定要用lib和dll文件的情况,那么,也不用重新编译.c文件,执行如下操作即可:

E:\Sqlite开发\windows 工具>cd sqlite-dll-win32-x86-3071700E:\Sqlite开发\windows 工具\sqlite-dll-win32-x86-3071700>dir 驱动器 E 中的卷是 E 卷的序列号是 4CD7-E1DC E:\Sqlite开发\windows 工具\sqlite-dll-win32-x86-3071700 的目录2013/05/22  18:55    <DIR>          .2013/05/22  18:55    <DIR>          ..2013/05/20  12:58             4,385 sqlite3.def2013/05/20  12:58           620,718 sqlite3.dll               2 个文件        625,103 字节               2 个目录 41,283,182,592 可用字节E:\Sqlite开发\windows 工具\sqlite-dll-win32-x86-3071700>lib /def:sqlite3.defMicrosoft (R) Library Manager Version 11.00.60315.1Copyright (C) Microsoft Corporation.  All rights reserved.LINK : warning LNK4068: /MACHINE not specified; defaulting to X86   Creating library sqlite3.lib and object sqlite3.expE:\Sqlite开发\windows 工具\sqlite-dll-win32-x86-3071700>dir 驱动器 E 中的卷是 E 卷的序列号是 4CD7-E1DC E:\Sqlite开发\windows 工具\sqlite-dll-win32-x86-3071700 的目录2013/05/22  19:10    <DIR>          .2013/05/22  19:10    <DIR>          ..2013/05/20  12:58             4,385 sqlite3.def2013/05/20  12:58           620,718 sqlite3.dll2013/05/22  19:10            29,576 sqlite3.exp2013/05/22  19:10            49,522 sqlite3.lib               4 个文件        704,201 字节               2 个目录 41,283,092,480 可用字节

也就是在dll文件夹路径下面做一次如下操作,就可以得到相应的lib文件了:

lib /def:sqlite3.def

 

注:这里简单说一下一个容易被人家理解错误的一个点,就是,不管是动态链接库还是静态链接库,都需要lib文件,只是前者是依据lib文件链接,然后在运行时找dll文件,后者就直接将lib文件链接在可执行文件一起了。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完小孩身体虚怎么办 孩子咳嗽厉害怎么办吃什么药 新生儿三天不拉大便怎么办 胃吃的变大了怎么办 小孩长高长的慢怎么办 小孩长高长得慢怎么办 小孩吃东西不吸收营养怎么办 婴儿长得太快怎么办 2个月婴儿长太快怎么办 孩子脚长得太快怎么办 4个月宝宝缺钙怎么办 2个月宝宝不长肉怎么办 小孩子长得不高怎么办 宝宝误吃蜂蜜了怎么办 有人拿着吃完的东西退货怎么办 婴儿个子长的慢怎么办 儿童长得太快怎么办 宝宝个子长太快怎么办 孩子九个月奶水不够怎么办 小孩起热痱子痒怎么办 媳妇生完小孩奶水出不来怎么办 生完孩子下奶疼怎么办 生完小孩没奶水怎么办 孩子半个月奶水越来越少怎么办 半个月后奶水越来越少怎么办 坐月子半个月奶水越来越少怎么办 孩子七个月奶水越来越少怎么办 生完孩子奶水越来越少怎么办 生完孩子回奶了怎么办 产妇3天没奶水怎么办 产后7天了奶水少怎么办 刚生完小孩没有奶水怎么办 突然就没奶水了怎么办 生完小孩没有奶水怎么办 生完宝宝没有奶怎么办 剖腹产奶涨的疼怎么办 生产一天了没奶怎么办 第一天断奶 奶水一直流出怎么办 新生儿刚出生没奶水怎么办 安卓手机死机了怎么办 婴幼儿几天不拉大便怎么办