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数据库的更多相关文章
- C语言:SQLITE3的学习
Sqlite基础学习 一.sqlite的概念 SQLite是一款轻型数据库,是遵守ACID的关系型数据库管理系统,由C语言开发设计.Sqlite的设计目标着眼于嵌入式领域,所以具有占用系统资源低和处理 ...
- 使用c语言实现linux数据库的操作
前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作. 使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据 ...
- 安卓使用SQlite3数据库无法id主键无法自动增加?不是的。
安卓使用SQlite3数据库无法id主键无法自动增加?不是的. 要这样写:id integer primary key ,要写integer而不是int所以会报错! http://blog.csdn. ...
- 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)
原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...
- 《全唐诗》的sqlite3数据库
下载地址: http://pan.baidu.com/s/1b2mE54quantangshi.db是sqlite3数据库,包括2张表.index表:volume 列(整数,主键) 表示卷号,从1到9 ...
- [Android]AndroidInject增加sqlite3数据库映射注解(ORM)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...
- Cocos2dx使用wxsqlite开源加密SQLite3数据库
最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...
- 基于s5pv210嵌入式linux系统sqlite3数据库移植
基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...
- Cocos移植到Android的一些问题-SQLite3数据库移植问题
首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一 ...
随机推荐
- mysql1130远程连接没有权限解决方法
原因擅自在两个远程连接,一种是由于mysql限制,一个是防火墙限制. 1,解决防火墙限制: 于mysql服务主机将关闭防火墙,或者在防火墙高级设置这增加了入站和出站规则,加号mysql的port.同意 ...
- T-SQL技巧收集——拆分字符串
原文:T-SQL技巧收集--拆分字符串 在开发中,很多时候都需要处理拆分字符串的操作.下面收集了几种方法供大家分享,其中的逗号可以改为多种有需要的符号,但是不能针对多种符号同时存在的例子.有待各位补充 ...
- poj 1456 Supermarket(并查集维护区间)
题意:有一些货物,每一个货物有价值和卖出的截至日期,每天能够卖一个货物,问能卖出的最大价值是多少. 思路:算法不难想到,按价值降序排列.对于每一件货物,从deadline那天開始考虑.假设哪天空 ...
- Properties类读写.properties配置文件
package com.hzk.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFo ...
- JQuery插件开发初探——结构熟悉
工作之余,对Jquery插件做了一点尝试,想着之前总用别人写的插件,自己要是也写一个用岂不是很cool.于是说干就干,动手开始写. 首先是模仿,从一个简单的功能进行入手,了解一下插件开发的流程和结构. ...
- python 架构简介(转)
前言: 开发语言python 越来越火 ,作为开发比较火的语言,python 对网页等的支持也很好,当你想用python来写网页的时候你就要选择框架了.到底要选择呢什么样子的框架,最适合你的项目 ...
- ViewPager用法
第一图: 页面中填充内容是随机关键词飞入和飞出动画效果,随后会更新,如今请先无视吧 ---2015-02-27--- 两年后最终更新了,网上都能搜到的,哎 无奈太懒http://bl ...
- SQL2000 MD5加密
原文:SQL2000 MD5加密 /***************************************************************************** * Na ...
- [Shell]输入參数
获取shell脚本的输入參数,而且推断得到的參数. #!/bin/bash #title: testPT.sh #atuhor: orangleliu #date: 2014-08-08 #desc: ...
- NSOJ Constructing Roads(图论)
There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...