博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite数据操作
阅读量:4568 次
发布时间:2019-06-08

本文共 4664 字,大约阅读时间需要 15 分钟。

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,SQLite引擎不是个程序与之通讯的独立进程,而是连接到程序中成为它的一个主要部分,其主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有着积极的作用。

1.Qt操作SQLite数据库
Qt提供了与平台以及数据库种类无关的访问数据库接口,支持类型和描述分别有:

Driver Type DescriptionQDB2 IBM DB2QIBASE Borland InterBase DriverQMYSQL MySQL DriverQOCI Oracle Call Interface DriverQODBC ODBC Driver (includes Microsoft SQL Server)QPSQL PostgreSQL DriverQSQLITE SQLite version 3 or aboveQSQLITE2 SQLite version 2QTDS Sybase Adaptive Server

涉及操作注意点:

<1>.创建Qt项目,数据库放置与工程同一个目录下,添加头文件【include <QtSql>】,Qt工程文件(xxx.pro)添加涉及库【QT +=sql】;
<2>.SQLite数据库主要操作

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //声明数据库类型db.setDatabaseName("demo.db");                          //关联数据库db.open();                                              //连接打开数据库【只有通过open激活到数据库的物理连接,否则不可用】QSqlQuery sqlQuery(db);                                 //数据库操作sqlQuery.exec("select * from 数据表");                   //通过exec执行sql相关操作db.close();                                             //用完,关闭数据库

<3>.简单例子

#include 
#include
#include
int main(int argc,char *argv[]){ QApplication app(argc,argv); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName((char *)"demo.db"); //db.setUserName("用户名"); //db.setPassword("密码"); if(!db.open()) { //连接数据库失败 return -1; } QSqlQuery sqlQuery; //插入数据 sqlQuery.prepare("insert into employee(id, name, salary) values(:id, :name, :salary)"); bool bInsert = sqlQuery.exec("insert into employee(id, name, salary) values(1001, '张三', 6500)"; //sqlQuery.bindValue(":id", 1001); //sqlQuery.bindValue(":name", "张三"); //sqlQuery.bindValue(":salary", "6500"); //bool bInsert = sqlQuery.exec(); if (!bInsert) { //插入数据失败 } //查询数据 sqlQuery.exec("select * from employee"); while (sqlQuery.next()) { int id = sqlQuery.value(0).toInt(); QString name = sqlQuery.value(1).toString(); QString salary = sqlQuery.value(2).toString(); //获取相关数据处理 } //更新数据 sqlQuery.exec("update employee set salary= \"7000\" where id=\"1001\""); app.exec(); return 0;}

2.C/C++接口操作SQLite数据库

SQLite本身提供了对应的API函数接口供C/C++程序调用,主要有:sqlite3_open(),sqlite3_exec()和sqlite3_close()。
<1>.核心对象
SQLite中主要的核心对象分别为:database_connection和prepared_statement
database_connection对象是由sqlite3_open()接口函数创建并返回的,在应用程序使用任何其他SQLite接口函数之前,必须先调用该函数以便获得database_connnection对象,在随后的其他调用中,都需要该对象作为输入参数以完成相应的工作;
prepare_statement可以把它视为编译后的SQL语句,作为涉及操作调用接口参数;

<2>.核心接口

sqlite3_open是操作SQLite数据库的入口函数,该函数返回database_connection对象,作为句柄参数供其他接口调用;

sqlite3_prepare将相关的SQL语句转换为prepared_statement对象,并在函数执行后返回对象指针,相当于一种操作初始化准备;

sqlite3_step用于评估sqlite3_prepare函数返回的prepared_statement对象,执行完将对象内部指针指向结果的数据行首,对于insert/update/delete等dml语句,该函数只需执行一次,其他需要访问其他数据行,需重复调用;

sqlite3_column获取当前行指定列的数据,由相关的接口完成该功能:

sqlite3_column_blobsqlite3_column_bytessqlite3_column_bytes16sqlite3_column_doublesqlite3_column_intsqlite3_column_int64sqlite3_column_textsqlite3_column_text16sqlite3_column_typesqlite3_column_valuesqlite3_column_count

其中sqlite3_column_count函数用于获取当前结果集中的字段数据;

sqlite3_finalize用于销毁prepared statement对象,避免内存泄露;

sqlite3_close用于关闭之前打开的database_connection对象;

<3>.简单例子

#include 
#include
int main(){ int iRet; sqlite3 *db=NULL; iRet = sqlite3_open("demo.db", &db) if (SQLITE_OK != iRet) { //打开数据库失败 return -1; } char *ErrMsg; //sqlite3_exec:参数1(数据库指针)/参数2(sql语句)/参数3(回调函数)/参数4(回调函数参数)/参数5(返回错误信息) iRet = sqlite3_exec(db, "insert into employee(id, name, salary) values(1001,\"张三\",\"6500\")", NULL, NULL, &ErrMsg); if (SQLITE_OK != iRet) { //插入数据失败 } //int sqlite3_prepare( // sqlite3 *db, /* Database handle */ // const char *zSql, /* SQL statement, UTF-8 encoded */ // int nByte, /* Maximum length of zSql in bytes. */ // sqlite3_stmt **ppStmt, /* OUT: Statement handle */ // const char **pzTail /* OUT: Pointer to unused portion of zSql */ // ); sqlite3_stmt *ppStmt; iRet = sqlite3_prepare(db,"select id,name,salary from employee", -1, &ppStmt, NULL); if (SQLITE_OK != iRet) { //读取数据失败 } else { while(sqlite3_step(ppStmt) == SQLITE_ROW) { printf("id: %s\t", sqlite3_column_text(ppStmt, 0)); printf("name: %s\t", sqlite3_column_text(ppStmt, 1)); printf("salary: %s\n", sqlite3_column_text(ppStmt, 2)); } sqlite3_finalize(ppStmt); } sqlite3_close(db); return 0;}

转载于:https://www.cnblogs.com/sz-leez/p/4567449.html

你可能感兴趣的文章
js取float型小数点后两位数的方法
查看>>
python字典操作和内置方法
查看>>
【Windows】Windows Restart Manager 重启管理器
查看>>
vim切换编程语言_一步步将vim改造成C/C++开发环境(IDE) (转自:Figthing)
查看>>
cascade sqlite 数据库_SQLITE ON UPDATE操作
查看>>
python 扯线木偶_每天写点儿(4)
查看>>
python是动态数据类型语言_[Python basic]Python basic数据类型;强类型动态脚本语言,基础,基本...
查看>>
apache 代理 图片无法展示_Apache中间件漏洞详解
查看>>
android 底部上滑菜单_底部工作表
查看>>
linux查看显卡型号p4卡或者t4卡_装机宝典二十三式 | 为什么你直播那么卡?小老弟试试双卡推流吧...
查看>>
k均值聚类算法考试例题_K-means 聚类算法
查看>>
外卖匹配系统_浅谈搭建校园外卖配送平台的可行性分析
查看>>
android 代码设置居右_挖穿Android第四十九天
查看>>
联想笔记本那些有手写功能_联想小新2021版笔记本正式发布,依然还是买新不买旧么?并不!...
查看>>
最强蜗牛击败毁灭机器人_黑色幽默才是王道 解读奇葩游戏最强蜗牛
查看>>
初中数学分几个模块_初中数学考试|8大模块,59个必考易错知识点大集合,附初中数学10大专题知识精讲...
查看>>
存储心跳线作用_汽车涂胶线新型吊具输送设备的应用
查看>>
命名时取代基优先顺序_浅谈有机化合物的英文命名(七)
查看>>
开启弹窗_弹窗广告总跳出来?学会这3种方法手机电脑再也不怕被打扰
查看>>
matlab 功率谱密度 汉宁窗_时域和频域特征提取Matlab编程实例
查看>>