#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. 【监控】jvisualvm之jmx远程连接 jar启动应用

    一.Java -jar启动添加如下参数就可以了 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 -Dcom.su ...

  2. golang并发基础

    1. go协程(go routine) go原生支持并发:goroutine和channel. go协程是与其他函数或方法一起并发运行的函数和方法.go协程可以看作是轻量级线程. 调用函数或者方法时, ...

  3. SQL进阶系列之6用关联子查询比较行与行

    写在前面 使用SQL对同一行数据进行列间的比较很简单,只需要在WHERE子句里写上比较条件就可以了,对于不同行数据进行列间比较需要使用自关联子查询. 增长.减少.维持现状 需要用到行间比较的经典场景是 ...

  4. root用户ssh可以登录,xftp通过sftp不能登录链接CentOS解决办法

    xftp显示无法连接到xx.xx.xx(服务器地址) 解决办法: 把/etc/ssh/sshd_config文件中的Subsystem sftp /usr/libexec/openssh/sftp-s ...

  5. Vue 项目中 ESlint 配置

    前言 对于 ESlint 这一块一直存在一些疑问,今天看到一个文章内容挺好的,这里拿来了. 一.eslint 安装 1.全局安装 npm i -g eslint 全局安装的好处是,在任何项目我们都可以 ...

  6. LeetCode 731. My Calendar II

    原题链接在这里:https://leetcode.com/problems/my-calendar-ii/ 题目: Implement a MyCalendarTwo class to store y ...

  7. cube.js 最近版本的一些更新

    有一段时间没有关注cube.js 了,刚好晚上收到一封来自官方的更新介绍,这里简单说明下 更多的数据驱动支持 bigquey, clickhouse snowflake,presto (很棒),hiv ...

  8. cjss 像编写css 一样开发web应用

    cjss 提供了使用类似css 的方式编写web 应用 cjss 包含的阶段 data prepare body element 几点说明 并不是所以阶段必须使用,但是每个级别只能存在一个script ...

  9. 使用gitstats分析git 仓库代码

    gitstats 是一个很不错的git 代码提交分析工具,可以帮助我们生成图表统计结果 工具文档信息 gitstats http://gitstats.sourceforge.net/ 安装 使用ce ...

  10. 框架 get 请求乱码

    解决方案: 在 tomcat 配置文件中添加 URIEncoding="utf-8"