#include <iostream>
#include <sqlite3.h>
using namespace std; int main()
{
cout << "Hello World!" << endl;
sqlite3 *sql = NULL; // 一个打开的数据库实例
const char * path = "/home/gaoyuan/temp/test.db";//某个sql文件的路径 // 根据文件路径打开数据库连接。如果数据库不存在,则创建。
// 数据库文件的路径必须以C字符串传入。
int result = sqlite3_open_v2(path, &sql, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL); if (result == SQLITE_OK) {
std::clog << "打开数据库连接成功";
}
else {
std::clog << "打开数据库连接失败";
} return ;
}

打开或者创建数据库

const char *sqlSentence = "INSERT INTO t_person(name, age) VALUES('夏明', 22); ";        //SQL语句
sqlite3_stmt *stmt = NULL; //stmt语句句柄 //进行插入前的准备工作——检查语句合法性
//-1代表系统会自动计算SQL语句的长度
int result = sqlite3_prepare_v2(sql, sqlSentence, -, &stmt, NULL); if (result == SQLITE_OK) {
std::clog<< "添加数据语句OK";
//执行该语句
sqlite3_step(stmt);
}
else {
std::clog << "添加数据语句有问题";
}
//清理语句句柄,准备执行下一个语句
sqlite3_finalize(stmt);

执行不返回数据的SQL语句(增、删、改)。

执行更新、删除语句和执行创表、添加语句基本类似,只需更改sql语句即可。)

const char *sqlSentence = "SELECT name, age FROM t_person WHERE age < 30;";    //SQL语句
sqlite3_stmt *stmt = NULL; // stmt语句句柄 //进行查询前的准备工作——检查语句合法性
//-1代表系统会自动计算SQL语句的长度
int result = sqlite3_prepare_v2(sql, sqlSentence, -, &stmt, NULL); if (result == SQLITE_OK) {
std::clog << "查询语句OK";
// 每调一次sqlite3_step()函数,stmt语句句柄就会指向下一条记录
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 取出第0列字段的值
const unsigned char *name = sqlite3_column_text(stmt, );
// 取出第1列字段的值
int age = sqlite3_column_int(stmt, );
//输出相关查询的数据
std::clog << "name = " << name <<", age = "<< age;
}
}
else {
std::clog << "查询语句有问题";
}
//清理语句句柄,准备执行下一个语句
sqlite3_finalize(stmt);

执行返回数据的SQL语句(查)。

if (sql) {
sqlite3_close_v2(sql);
sql = nullptr;
}

关闭数据库:sqlite3_close_v2(sqlite3* sql)

SQLite3 库函数 总结

1.打开数据库

int sqlite3_open_v2(
const char *filename,   // 数据库的文件路径
sqlite3 **ppDb,       // 数据库实例
int flags,          // 标志
const char *zVfs      // 使用该数据库的虚拟机的名字,这里我们不需要用,直接NULL
);

其中:

flags参数有如下标志:
SQLITE_OPEN_NOMUTEX: 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)
SQLITE_OPEN_FULLMUTEX:设置数据库连接运行在串行模式。
SQLITE_OPEN_SHAREDCACHE:设置运行在共享缓存模式。
SQLITE_OPEN_PRIVATECACHE:设置运行在非共享缓存模式。
SQLITE_OPEN_READWRITE:指定数据库连接可以读写。
SQLITE_OPEN_CREATE:如果数据库不存在,则创建。

2.检查SQL语句的合法性(查询前的准备)

若语句合法即编译通过,则将语句产生的指令塞进stmt句柄(此时并未执行指令)

int sqlite3_prepare_v2(
sqlite3 *db, // 数据库实例
const char *zSql, // 需要检查的SQL语句
int nByte, // SQL语句的最大字节长度
sqlite3_stmt **ppStmt, // stmt句柄,用来存储SQL stmt指令
const char **pzTail
);

3.执行stmt句柄(执行存储在stmt句柄的指令

如果指令能查询到下一行数据,就会返回SQLITE_ROW

如果指令(例如写入数据)不需要返还数据,就会返还SQLITE_DONE

int sqlite3_step(
  sqlite3_stmt* stmt   //stmt句柄
);

4.利用stmt句柄获得第iCol字段的值(字段的下标从0开始)

//执行完查询句柄后,stmt就会指向查到的数据

//然后可以通过stmt获取相应数据

double sqlite3_column_double(sqlite3_stmt*, int iCol);                  // 浮点数据
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据

其他:

清理语句句柄(以便重复使用同一个stmt句柄)

int sqlite3_finalize(
  sqlite_stmt* stmt      //stmt句柄
);

关闭数据库连接

int sqlite3_close_v2(
  sqlite3 * sql, // 数据库实例
);

直接编译并执行 SQL语句

(不推荐使用:1、没有SQL语法检查 2、每一句SQL语句即使完全一样,也会重新编译执行,对批量指令来说效率不高。)

int sqlite3_exec(
sqlite3* sql, // 一个打开的数据库实例
const char * sqlSentence, // 需要执行的SQL语句
int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调
void *, // 回调函数的第1个参数
char **errmsg // 错误信息
);

|额外:使用SQLiteStudio工具来辅佐

SQLiteStudio是一个可视化的数据库管理工具。

通过可视化界面,它可以方便快捷地查看或操作数据库信息。

它是程序sqlite数据调试检查不可或缺的辅助工具。

(界面大概如图:)

SQLiteStudio 下载地址:https://sqlitestudio.pl/index.rvt?act=download

[转]c++ 开发 sqlite的更多相关文章

  1. windows phone 8.1开发SQlite数据库引用安装

    原文出自:http://www.bcmeng.com/windows-phone-sqlite/ windows phone 8.1开发SQlite数据库引用安装 第一步: 安装SQlite forw ...

  2. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  3. iOS开发--SQLite重要框架FMDB的使用

    什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...

  4. Android数据库开发——SQLite

    上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app ...

  5. 使用Python开发SQLite代理服务器(转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...

  6. android开发--sqlite数据库

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQL ...

  7. WP7开发 Sqlite数据库的使用 解决Unable open the database

    WP7本身不支持Sqlite数据库,但我们可以添加第三方组件让它支持Sqlite. 首先在项目中添加引用Community.CsharpSqlite.WP.dll,我会放后面让大家下载,我下了有几天了 ...

  8. (转)python 开发 sqlite 绝对完整

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  9. Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈

    目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...

  10. Android开发SQLite数据库的创建

    package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...

随机推荐

  1. map put相同的key

    Map添加相同的key 2018年09月09日 10:37:12 Airport_Le 阅读数:6479   HashMap是的key是不能重复的,如果有相同的key,最后一个key对应的value会 ...

  2. KM(Kuhn-Munkres)算法求带权二分图的最佳匹配

    KM(Kuhn-Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的.但是,在了解了算法的执行过程和原理后, ...

  3. SpringBoot集成MyBatis的Bean配置方式

    SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...

  4. What is the syntax for a for loop in TSQL?

    loop  报错 英 [luːp]  美 [lup]  口语练习 vi. 打环:翻筋斗 n. 环:圈:弯曲部分:翻筋斗 vt. 使成环:以环连结:使翻筋斗 syntax  报错 英 ['sɪntæks ...

  5. linux中>/dev/null 2>&1和2>&1 > /dev/null

    转载:https://www.cnblogs.com/520playboy/p/6275022.html 背景 我们经常能在shell脚本中发现>/dev/null 2>&1这样的 ...

  6. xml的运用

    <?xml version="1.0" encoding="utf-8"?><class> <student> <na ...

  7. GITHUB手册

    GitHub 指南 原文地址:GitHub官网指南 示例项目:Hello World 十分钟轻松教学 在学习计算机语言编程的过程中创建Hello World 项目是一个历史悠久的传统.当你接触一门新事 ...

  8. django-列表分页和排序

    视图函数views.py # 种类id 页码 排序方式 # restful api -> 请求一种资源 # /list?type_id=种类id&page=页码&sort=排序方 ...

  9. Markdown 设置字体大小颜色及背景色

    一.更改字体.大小.颜色 <font face="黑体">我是黑体字</font><font face="微软雅黑">我是微 ...

  10. ACM-ICPC 2018 南京赛区现场赛 K. Kangaroo Puzzle (思维+构造)

    题目链接:https://codeforc.es/gym/101981/attachments 题意:在 n * m 的平面上有若干个袋鼠和墙(1为袋鼠,0为墙),每次可以把所有袋鼠整体往一个方向移动 ...