目录

安装

在我们开始使用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目录,你会有什么结果如下

-rwxr-xr-x. 1 root root 7383 May  8 02:06 a.out
-rw-r--r--. 1 root root  323 May  8 02:05 test.c
-rw-r--r--. 1 root root    0 May  8 02:06 test.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和最终的清单文件将如下:

-rwxr-xr-x. 1 root root 9567 May  8 02:31 a.out
-rw-r--r--. 1 root root 1207 May  8 02:31 test.c
-rw-r--r--. 1 root root 3072 May  8 02:31 test.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;

}

以上程序编译和执行时,它将创建鉴于公司表和记录将显示以下两行:

Opened database successfully
Records created successfully

查询操作

在我们继续进行之前,获取记录,与实际例子让我给一个小细节的回调函数,我们使用我们的例子。这个回调提供了一种方法来获取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;

}

当以上程序编译和执行,这将产生以下结果:

Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 25000.0
Callback function called: ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0
Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0
Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

更新操作

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;

}

当以上程序编译和执行,这将产生以下结果:

Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0
Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0
Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

SQLite C/C++ 教程的更多相关文章

  1. SQLite数据库入门教程

    SQLite数据库入门教程 SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...

  2. Andoird - SQLite 数据库 基础教程

    链接来源 http://www.tutorialspoint.com/android/android_sqlite_database.htm SQLite是一个开源的SQL数据库,这个数据库把数据存储 ...

  3. SQLite基础教程目录

    SQLite基础教程目录 SQLite主页 SQLite概述 SQLite -安装 SQLite -命令 SQLite -语法 SQLite -数据类型 SQLite -创建数据库 SQLite -附 ...

  4. ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF SQLite 支持 上一章节我有提 ...

  5. C# SQLite 数据库操作

    C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...

  6. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like

    目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据  五.查询数据  六.删除数据  七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...

  7. php读取sqlite数据库入门实例

    php读取sqlite数据库的例子,php编程中操作sqlite入门实例.原文参考:http://www.jbxue.com/article/php/22383.html在使用SQLite前,要确保p ...

  8. 通过代码来操作SQLite的示例

    Getting started with SQLite in C# http://blog.tigrangasparian.com/2012/02/09/getting-started-with-sq ...

  9. SQLite概述

    SQLite概述 这个教程帮助您理解SQLite是什么,它如何不同于SQL,为什么它是必要的和它的方式处理应用程序数据库.   SQLite是一个库,实现了一个独立的软件,serverless zer ...

随机推荐

  1. 1.1-1.4 sqoop概述及安装cdh版hadoop

    一.概述 Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,结构化数据可以是Mysql.Oracle等RDBMS. Sqoop底层用MapReduce程序实现抽取.转换.加载,Ma ...

  2. 4.1-4.2 基于HDFS云盘存储系统分析及hadoop发行版本

    一.基于HDFS云盘存储系统 如:某度网盘 优点: *普通的商用机器 内存 磁盘 *数据的安全性 操作: *put   get *rm  mv *java api *filesystem 核心: *H ...

  3. TypeScript完全解读(26课时)_12.TypeScript完全解读-高级类型(1)

    12.TypeScript完全解读-高级类型(1) 高级类型中文网的地址:https://typescript.bootcss.com/advanced-types.html 创建新的测试文件 ind ...

  4. Linux文件IO操作函数概述

    文件概述 Linux中,一切皆文件.文件为操作系统服务和设备提供了一个简单而一致的接口.这意味着程序完全可以像使用文件那样使用磁盘文件.串行口.打印机和其他设备. 也就是说,大多数情况下,你只需要使用 ...

  5. 两个MATLAB在线工具,画图啥的都不用安装了

    1. matlab网页版 http://octave-online.net/ http://www.compileonline.com/execute_matlab_online.php   2. 函 ...

  6. jQuery 设置图片 src 的2种方法

    // 方法1 $('#imgValidateCode').attr("src", data.CodeUrl); // 方法2 var self = $("#refresh ...

  7. PHP实现用户登录注册功能

    初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果: 注册成功条件/功能: 1)用户名不能冲突 2)两次密 ...

  8. ubuntu 安装R 语言

    我个人的环境是 ubuntu 12.04 64 位桌面版. 我自己在安装R 语言时,发现它依赖的库真不是一般的多,所以我在这里简单记录一下我整个安装过程 首先你需要安装 apt-get install ...

  9. 阿里mavne中央仓库

    https://www.cnblogs.com/ae6623/p/4416256.html 待整理

  10. ISCC 2018线上赛 writeup

    今天有机会去ISCC2018参加了比赛,个人的感受是比赛题目整体难度不高,就是脑洞特别大,flag形式不明确,拿到flag后也要猜测flag格式,贼坑 废话不多说,以下是本人的解题思路 MISC 0x ...