原文:C语言使用SQLite3数据库

SQLite是一个著名的免费数据库(不管是商用还是私人使用都免费),已经向众多公司如Adobe, Airbus, Apple, google, GE, Microsoft等提供了支持。

SQLite不像其它多数的SQL数据库,它没有一个独立的服务进程,它是独立的、无进程的数据库(用起来它也像一个语言库),它对数据的读写操作是直达磁盘的。

下面我们使用C语言来试用一个SQLite

1 先到http://www.sqlite.org/download.html下载你的操作系统所对应的文件

对方C语言的操作来说,只需要源码就可以了:

Source Code

sqlite-autoconf-3080701.tar.gz
(1.91 MiB)

一般而言我们也需要使用命令行对数据库中的数据进行增删改查操作,所以也下载下面的这两个文件:

Precompiled Binaries for Windows

sqlite-shell-win32-x86-3080701.zip
(303.20 KiB)

sqlite-dll-win32-x86-3080701.zip
(335.37 KiB)

2 在QT Creator中新建一个纯C工程(我这里名字叫做sqlite3_test),然后修改main.c为下面这样样子

#include <stdio.h>
#include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i; for(i=; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
} printf("\n");
return ;
} int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = ;
int rc; if( argc!= ){
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[]);
return();
} rc = sqlite3_open(argv[], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return();
} rc = sqlite3_exec(db, argv[], callback, , &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} sqlite3_close(db); return ;
}

3

将sqlite-autoconf-3080701.tar.gz解压出来,把其中的sqlite3.h拷贝出来放到Qt工程根目录下。

将sqlite-dll-win32-x86-3080701.zip解压出来,把其中的sqlite3.dll拷贝到Qt工程目录下。

将sqlite-shell-win32-x86-3080701.zip解压出来,把其中的sqlite3.ext拷贝到C:\Windows\System32下面,这样在CMD命令行窗口下就可以直接运行sqlite3了(shell)。

打开一个CMD窗口,然后到达你的工程根目录下面,然后运行sqlite3打开SQLite Shell,按下面的操作新建一个数据库并插入数据,以便于C语言去读取操作:

sqlite> .tables
sqlite> .open test.db
sqlite> .tables
sqlite> create table tbl1(one varchar(), two smallint);
sqlite> insert into tbl1 values('hello!', );
sqlite> insert into tbl1 values('goodbye', );
sqlite> select *from tbl1;
hello!|
goodbye|

4 设置QT工程的编译选项

第3步把该要的文件都拷贝到对应的目录了,然后现在编译还没有办法通过,需要一些设置。

修改sqlite3_test.pro文件(红色为新增的)

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt SOURCES += main.c LIBS += sqlite3.dll include(deployment.pri)
qtcAddDeployment()

给应用程序添加运行参数,即从命令行运行的话需要执行sqlite3_test test.db "select * from tbl1"

test.db "select * from tbl1"

5 编译运行

参考:

Command Line Shell For SQLite http://www.sqlite.org/cli.html

C-language interface to SQLite http://www.sqlite.org/c3ref/intro.html

SQL As Understood By SQLite http://www.sqlite.org/lang.html

SQLite3 C语言API入门 http://www.blogjava.net/xylz/archive/2012/09/25/388519.html

SQLite3 API编程手册 http://www.cnblogs.com/hnrainll/archive/2011/09/08/2170506.html

C语言使用SQLite3数据库的更多相关文章

  1. C语言:SQLITE3的学习

    Sqlite基础学习 一.sqlite的概念 SQLite是一款轻型数据库,是遵守ACID的关系型数据库管理系统,由C语言开发设计.Sqlite的设计目标着眼于嵌入式领域,所以具有占用系统资源低和处理 ...

  2. 使用c语言实现linux数据库的操作

    前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作. 使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据 ...

  3. 安卓使用SQlite3数据库无法id主键无法自动增加?不是的。

    安卓使用SQlite3数据库无法id主键无法自动增加?不是的. 要这样写:id integer primary key ,要写integer而不是int所以会报错! http://blog.csdn. ...

  4. 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)

    原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...

  5. 《全唐诗》的sqlite3数据库

    下载地址: http://pan.baidu.com/s/1b2mE54quantangshi.db是sqlite3数据库,包括2张表.index表:volume 列(整数,主键) 表示卷号,从1到9 ...

  6. [Android]AndroidInject增加sqlite3数据库映射注解(ORM)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...

  7. Cocos2dx使用wxsqlite开源加密SQLite3数据库

    最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...

  8. 基于s5pv210嵌入式linux系统sqlite3数据库移植

    基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...

  9. Cocos移植到Android的一些问题-SQLite3数据库移植问题

    首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一 ...

随机推荐

  1. POJ2195 Going Home 【最小费用流】+【最佳匹配图二部】

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18169   Accepted: 9268 Descr ...

  2. asp.net webapi 多文件上传

    使用enctype="multipart/form-data"来进行操作 /// <summary> /// 上传图片 /// </summary> /// ...

  3. 【从零学习openCV】IOS7根据人脸检测

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app.总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  4. nisi 脚本示例

    只是简单的copy文件和添加快捷方式,安装和卸载时对程序是否运行进行检测 ;-------------------------------- ;Include Modern UI !include & ...

  5. lua三底漆:lua转让c/c++库(动态链接模式)

    dll按功能luaL_openlib出口,然后lua使用package.loadlib导入库函数,基本就是这么个过程,以下上代码来说明一切. #include "stdafx.h" ...

  6. XCL-Charts画一个图(CurveChart)

    情节线图与往常不同的是,它是一个比较特殊线位置计算.所以我得到一个单独的类.相同.只需要输入数据源的基类, 加,控制要添加的.你可以画出你自己主动设置按照预期的效果. 代码: //图基类 chart ...

  7. socket-详细分析No buffer space available(转)

    新年上班第一天,突然遇到一个socket连接No buffer space available的问题,导致接口大面积调用(webservice,httpclient)失败的问题,重启服务器后又恢复了正 ...

  8. Javascript中的深拷贝和浅拷贝

    var obj = { a:1, arr: [1,2] }; var obj1 = obj; //浅复制 var obj2 = deepCopy(obj); //深复制 javascript中创建对象 ...

  9. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  10. Cocos2d-x 文本渲染

     文本渲染: CCLabelAtlas.CCLabelBMFont.CCLabelTTF类都是继承 CCLabelProtocol类,即能够使用系统字,也能够自己定义渲染字体. CCLabelAtla ...