[转]c++ 开发 sqlite
- #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的更多相关文章
- windows phone 8.1开发SQlite数据库引用安装
原文出自:http://www.bcmeng.com/windows-phone-sqlite/ windows phone 8.1开发SQlite数据库引用安装 第一步: 安装SQlite forw ...
- windows phone 8.1开发SQlite数据库操作详解
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
- iOS开发--SQLite重要框架FMDB的使用
什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...
- Android数据库开发——SQLite
上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app ...
- 使用Python开发SQLite代理服务器(转载)
转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...
- android开发--sqlite数据库
一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQL ...
- WP7开发 Sqlite数据库的使用 解决Unable open the database
WP7本身不支持Sqlite数据库,但我们可以添加第三方组件让它支持Sqlite. 首先在项目中添加引用Community.CsharpSqlite.WP.dll,我会放后面让大家下载,我下了有几天了 ...
- (转)python 开发 sqlite 绝对完整
'''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...
- Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈
目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...
- Android开发SQLite数据库的创建
package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabas ...
随机推荐
- Windows10家庭版安装docker攻略
在公司,一直使用mac系统,在mac上安装使用docker还是比较方便的,可本人心血来朝,家里是win10 home版,就想在windows上刷一刷. 好了,废话不多说,直接上干货. 为了不误导广大爱 ...
- Web数据库架构
Web服务器的基本操作如图下图所示: 这个系统由两个对象组成:一个Web浏览器和一个Web服务器.它们之间需要通信连接.Web浏览器向服务器发出请求.服务器返回一个响应.这种架构非常适合服务器发布静态 ...
- CentOS7下的AIDE入侵检测配置
一.AIDE的概念 AIDE:Advanced Intrusion Detection Environment,是一款入侵检测工具,主要用途是检查文档的完整性.AIDE在本地构造了一个基准的数据库,一 ...
- Linux跑脚本用sh和./有什么区别?
一个很有意思的例子: sh是一个shell.运行sh a.sh,表示我使用sh来解释这个脚本:如果我直接运行./a.sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的sh ...
- 项目Beta冲刺——凡事预则立
班级:软件工程1916|W 作业:项目Beta冲刺(团队) 团队名称:Echo 作业目标:规定代码规范,明确冲刺任务与计划 目录 团队博客汇总 讨论组长是否重选的议题和结论 下一阶段需要改进完善的功能 ...
- luoguP2768: 珍珠项链(矩阵乘法优化DP)
题意:有K种珍珠,每种N颗,求长度为1~N的项链,包含K种珍珠的项链种类数.N<=1e9, K<=30; 思路:矩阵快速幂,加个1累加前缀和即可. #include<bits/std ...
- 【Selenium-WebDriver实战篇】ScreenRecorder的实际输出路径,自己的解决方案
==================================================================================================== ...
- springboot项目报错Could not resolve placeholder 'datasource.type' in value "${datasource.type}"解决办法
一,首先确认数据库的连接信息是否都正确,数据库能否正常连接(例如用客户端能连接上):二,确认配置文件中datasource.type配置是否正确,此处我们公司用的阿里的是com.alibaba.dru ...
- java项目部署
本文章只为帮助大家学习项目的发布,为基础篇,在此给大家示范在window环境下的项目部署及运维. 以下版本为讲解示例,可自行改至匹配版本. 服务器:window service2008 R2 Stan ...
- hdu3625
hdu3625 题意: 酒店发生一起谋杀案.作为镇上最好的侦探,您应该立即检查酒店的所有N个房间.但是,房间的所有门都是锁着的,钥匙刚锁在房间里,真是个陷阱!您知道每个房间里只有一把钥匙,并且所有可能 ...