目录

安装

在我们开始使用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. 2.7-2.8 导入、导出数据(进/出)hive表的方式

    一.导入数据进hive表 1.语法 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (p ...

  2. Laravel中使用模型对数据进行操作

    public function orm(){ //查询表的所有记录 //$user = Admin::all(); //dd($user); //查询某一条记录 //$user = Admin::fi ...

  3. FZU 2150 Fire Game (高姿势bfs--两个起点)(路径不重叠:一个队列同时跑)

    Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows ...

  4. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一)

    本文属于图神经网络的系列文章,文章目录如下: 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络模型 (一) 从图(Graph)到图卷积(Graph Convolutio ...

  5. UIWebView与JavaScript的交互

    UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS ...

  6. ubuntu 14.04 源码编译postgresql

    环境 ubuntu 14.04 桌面版 postgresql 源码下载链接,本教程是使用postgresql 9.3.4 进行编译的 http://www.postgresql.org/ftp/sou ...

  7. POI刷题记录

    POI2007 HNOI2018滚粗后,默默来刷POI 先从2007刷起 bzoj1103[POI2007]大都市meg bzoj1098[POI2007]办公楼biu bzoj1102[POI200 ...

  8. 在项目中移除CocoaPods

    如果你觉得CocoaPods让你的项目出现了问题,不好用甚至是恶心,想将其从项目中彻底移除,也有方法: 1.删除工程文件夹下的Podfile.Podfile.lock和Pods文件夹. 2.删除xcw ...

  9. DRF教程4-视图集和路由类

    rest框架包括一个处理viewset的抽象,允许开发人员集中精力处理api交互和建模,url构造都根据常见方式自动处理. ViewSet类 几乎和VIew类一样,不过它提供read,update这样 ...

  10. Codeforces Round #497 (Div. 2)B. Turn the Rectangles

    Bryce1010模板 http://codeforces.com/contest/1008/problems #include <bits/stdc++.h> using namespa ...