SQLite C/C++ 教程
目录
安装
在我们开始使用SQLite在C / C++程序,我们需要确保SQLite库设置的机器上。您可以检查SQLite安装章了解安装过程
详情请见:http://www.cnblogs.com/BoyXiao/archive/2012/03/31/2426495.html
C/C++ Interface APIs
以下是重要的C&C + + / SQLite接口程序可以满足你的要求使用SQLite数据库从您的C / C++程序。如果你正在寻找一个更复杂的应用程序,然后你可以看看SQLite官方文档。
|
S.N |
API |
|
1 |
sqlite3_open(const char *filename, sqlite3 **ppDb) 这个例程打开一个连接到SQLite数据库的文件,并返回一个数据库连接对象被其他使用SQLite例程。 如果文件名参数是NULL或内存:,sqlite3_open()将创建一个内存数据库在RAM中,只持续时间的会议。 如果文件名不是NULL,sqlite3_open()尝试打开数据库文件通过使用它的价值。如果没有叫这个名字的文件存在,sqlite3_open()将打开一个新的数据库文件的名称。 |
|
2 |
sqlite3_exec(sqlite3*,const char *sql, sqlite_callback, void *data, char **errmsg) 这个程序提供了一种快速、简单的方法来执行SQL命令提供的SQL参数可以包含一个以上的SQL命令。 这里,第一个参数sqlite3开放数据库对象,sqlite_callback回调数据是第一参数和errmsg将返回来捕获任何错误提出的例行公事。 sqlite3_exec()例程解析并执行每个命令的sql参数,直到到达结束的字符串或遇到错误。 |
|
3 |
sqlite3_close(sqlite3*) 这个例程关闭数据库连接调用sqlite3_open之前打开的()。与连接相关联的所有准备好的语句应在关闭连接之前完成。 如果任何疑问仍然没有完成,sqlite3_close()将返回SQLITE_BUSY由于unfinalized语句错误消息无法关闭。 |
以下代码要求提示:
每一例子创建的数据库,都是基于前一个数据库创建的。否则以下代码均不能运行!!
连接到数据库
在C代码片段展示了如何连接到现有的数据库。如果数据库不存在,那么它将被创建并最终将返回一个数据库对象。
|
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> int main(int argc, char* argv[]) { 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)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); } |
现在,让我们来编译和运行程序来创建我们的数据库测试之上。db在当前目录。你可以改变你的路径按您的需求。
|
$gcc test.c -l sqlite3 $./a.out Opened database successfully 如果你要使用c++源代码,然后你可以编译代码如下: $g++ test.c -l sqlite3 我们连接我们的程序与sqlite3图书馆提供所需功能的C程序。这将创建一个数据库文件测试。db目录,你会有什么结果如下
|
创建表
接着,这段C代码段将用于以前创建的数据库中创建一个表
|
#include <stdio.h> #include <stdlib.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(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stdout, "Opened database successfully\n"); } /*** 产生SQL语句 ***/ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /*** 执行SQLite语句***/ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Table created successfully\n"); } sqlite3_close(db); return 0; } |
以上程序编译和执行时,它将创建公司在您的测试表。db和最终的清单文件将如下:
|
插入操作
这段C代码段显示了如何创建记录在我们公司中创建表上面的例子:
|
#include <stdio.h> #include <stdlib.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(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); "\ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "\ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); "\ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "\ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); "; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Records created successfully\n"); } sqlite3_close(db); return 0; } |
以上程序编译和执行时,它将创建鉴于公司表和记录将显示以下两行:
|
查询操作
在我们继续进行之前,获取记录,与实际例子让我给一个小细节的回调函数,我们使用我们的例子。这个回调提供了一种方法来获取SELECT语句的结果。它具有以下声明:
|
typedefint(*sqlite3_callback)( void*,/*提供sqlite3_exec 4参数的数据() */ int,/*行中的列数 */ char**,/*代表行中的字段的字符串数组*/ char**/*一个字符串数组代表列名 */ ); |
如果上面的回调提供了sqlite_exec作为第三个参数()例程,SQLite将为每个记录调用这个回调函数处理每个SELECT语句内执行SQL参数。
C代码段显示我们如何获取和显示记录从我们公司表中创建上面的例子:
|
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; } |
当以上程序编译和执行,这将产生以下结果:
|
更新操作
C代码片段展示了如何使用UPDATE语句更新任何记录,然后获取和显示从我们公司表更新记录:
|
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " \ "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; } |
删除操作
C代码片段展示了如何使用DELETE语句删除任何记录,然后获取并显示剩余记录从我们公司表:
|
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); }else{ fprintf(stderr, "Opened database successfully\n"); } /* Create merged SQL statement */ sql = "DELETE from COMPANY where ID=2; " \ "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; } |
当以上程序编译和执行,这将产生以下结果:
|
SQLite C/C++ 教程的更多相关文章
- SQLite数据库入门教程
SQLite数据库入门教程 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- Andoird - SQLite 数据库 基础教程
链接来源 http://www.tutorialspoint.com/android/android_sqlite_database.htm SQLite是一个开源的SQL数据库,这个数据库把数据存储 ...
- SQLite基础教程目录
SQLite基础教程目录 SQLite主页 SQLite概述 SQLite -安装 SQLite -命令 SQLite -语法 SQLite -数据类型 SQLite -创建数据库 SQLite -附 ...
- ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF SQLite 支持 上一章节我有提 ...
- C# SQLite 数据库操作
C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...
- 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like
目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据 五.查询数据 六.删除数据 七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...
- php读取sqlite数据库入门实例
php读取sqlite数据库的例子,php编程中操作sqlite入门实例.原文参考:http://www.jbxue.com/article/php/22383.html在使用SQLite前,要确保p ...
- 通过代码来操作SQLite的示例
Getting started with SQLite in C# http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sq ...
- SQLite概述
SQLite概述 这个教程帮助您理解SQLite是什么,它如何不同于SQL,为什么它是必要的和它的方式处理应用程序数据库. SQLite是一个库,实现了一个独立的软件,serverless zer ...
随机推荐
- 洛谷 - P1593 - 因子和 - 费马小定理
类似的因为模数比较小的坑还有卢卡斯定理那道,也是有时候逆元会不存在,因为整除了.使用一些其他方法避免通过逆元. https://www.luogu.org/fe/problem/P1593 有坑.一定 ...
- API网络接口
1.天气 文章:http://segmentfault.com/a/1190000002607883 地址:http://api.lib360.net/open/weather.json?city=北 ...
- 381. Insert Delete GetRandom O(1) - Duplicates allowed
Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ...
- lightoj 1088【树状数组+离散化】
题意: 给你n个数,然后给你q个区间,然后问你这n个数有多少个在这个区间上: 思路: 树状数组搞搞,但是注意到数的范围很大,所以先离散化一下. 初始化初始化!!!卧槽,wa的我好郁闷... #incl ...
- 1.python真的是万恶之源么?(初识python)
python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...
- 计算机网络自顶向下方法第2章-应用层(application-layer).1
2.1 应用层协议原理 2.1.1网络应用程序体系结构 1)在客户-服务器体系结构 (client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为 ...
- nutz 使用beetl
src目录或src同级的其他目录(比如conf)下创建 beetl.properties文件,文件内容如下 (maven项目)在resources目录下创建 RESOURCE_LOADER=org.b ...
- HDU 1875(最小生成树)
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> ...
- dzzoffice 任意文件下载漏洞分析
dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始: elseif($_GET['do']=='move'){ $obz=trim($_ ...
- 洛谷P2514||bzoj2426 [HAOI2010]工厂选址
洛谷P2514 bzoj2426 其实是个简单的贪心,然而不适合在脑子不清醒的时候做...看不懂题意续了1个小时 很容易发现应该枚举新建哪个发电厂,对于这种方案就是取其中b吨煤运到原来发电厂,取剩下( ...