Qt+sqlite3

C++/Qt使用Sqlite3数据库 代码: connect_Sqlite3.h分析代码:para1: 数据库类型;para2: 链接名称;默认的链接名称为 qt_sql_default_connection 可以用下面代码进行判断是否有其链接正在链接,如果有返回这个链接,如果没有设置新的数据库句柄。代码。 阅读详情

Qt+sqlite3  

一、QT编译数据库问题:

 1、根文件系统:友善提供的源代码,去掉qtopia之后的qt4部分

 2、问题现象    :

QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");

db.setDatabaseName("database.db");

*第一步:链接嵌入式数据库QSQLITE的,已经绑定成功

if (!db.open()) {

QMessageBox::warning(0, QObject::tr("Database Error"),

db.lastError().text());

qDebug() <<QString("dasfsdafdaga");

 return false;

}

*第二步:打开数据库也没有问题

QSqlQuery query;

query.exec(QObject::tr("create table student (id int primary key, name vchar)"));

query.exec(QObject::tr("insert into student values (0,'刘明')"));

query.exec(QObject::tr("insert into student values (2,'王红')"));

*第三步,数据库操作开始出现问题,在PC机上实现的实现的时候这步一旦执行isActive变为true,数据库写入成功。但是移植到arm上之后却显示为false。我就郁闷了,数据库没法操作啊。网上查了老半天,遇到同样问题的人挺多,就是没有人说解决方案,有人在帖子上说跟友善的根文件系统配置有关,我打电话问友善技术支持,他们说友善对数据库的支持比较差,他们也不确定是什么问题。继续查了几天错误,还是不知道到底是少了什么库还是少了什么设置,就是不能用,有个前辈建议我改为xml或者装个sqlite3的插件先代替数据库,最后决定,还是装sqlite3插件了。

 

二、QT+sqlite3

先说一下QT自带数据库和sqlite3的区别,他们的功能是一样的,但是代码就不一样了。QT对数据库具有完善的支持,不需要加任何其他插件就可以直接使用,但是如果你要是加了sqlite3插件,调用数据库就跟直接调用一个驱动一样,直接调用接口函数:open、close、……,换言之QT自带的数据库语言就用不上了。

1、安装sqlite3插件

从官方网站http://www.sqlite.org下载完整版本。

2、安装sqlite3

网上可以看到很多修改下载之后的源代码的论坛,我估计那些帖子比较老一点,最新版的代码已经不存在那些bug了,可以直接编译

 

 *注意复制粘贴库函数的时候有的动态链接库如果单独复制会丢失之间的链接关系,所以需要一块复制

cp -arf libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 。。。

3、移植sqlite3

在QTE的include文件中建立新文件夹sqlite3,将头文件放到里面;把库文件放到QTE的lib文件中

4、编程

(1) QT生成的.pro文件中添加库指令: LIBS += -lsqlite3

(2) 在调用数据库的文件的头文件里添加头文件和变量

 #include "sqlite3/sqlite3.h"            

 sqlite3 *db;        //数据库

 char *zErrMsg;      //出错信息

 char  **resultp;    //调用时的保存位置

 int  nrow;          //列数

int  ncolumn;       //行数

 char  *errmsg;      //出错信息

 

(3)新建或打开数据库      

if( (sqlite3_open("people.db", &db)) != 0 ){

qDebug()<<"sqlite3 open is false";

 }

else {

qDebug()<<"sqlite3 open is OK";

 

 }

(4) 建立表格

sqlite3_exec(db, "create table person(name varchar(30) PRIMARY KEY, age int);", NULL, NULL, &zErrMsg);

*添加 PRIMARY KEY 是指定主键,每个数据库只能有一个,主键的值不能重复,比方说你设定name为主键,则相同名字的人只能保存第一个,其他的忽略不计。若想避免这种情况,则去掉主键或者设定id号为主键(id号一直加一,不会重复)。

(5)往表格里写入信息

 a.直接添加数据  

 sqlite3_exec(db, "insert into person values('张翼', 30)", NULL, NULL, &zErrMsg);

 sqlite3_exec(db, "insert into person values('hongdy', 28)", NULL, NULL, &zErrMsg);                     

 b.添加数字变量

 int  data=10;

 char sql2[100];  //必须写明大小,划分内存,如果只写一个 char *sql2,会出现段错误

 sprintf(sql2,"insert into person values('张翼',%d);",data);

sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);

*sprintf的作用是字串格式化命令,主要功能是把格式化的数据写入某个字符串中

 c.添加字符串变量

 char data[]="张翼";

 char sql2[100];

 sprintf(sql2,"insert into person values('%s',10);",data);

 

sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);

 * %s需要用单引号注释             

d.添加text中的变量到数据库中

 这里需要汉字编码的问题,Windows下默认GBK或GB2312编码,Linux下默认UTF-8编码,所以如果没有设置好会出现乱码

d1. 在main.cpp中添加以下指令,支持中文显示 

 #include <QTextCodec>

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));

d2. 读取保存

 char *abc=ui->lineEdit->text().toUtf8().data();   //QString 转char*

 sprintf(sql2,"insert into person values('%s',%d);",abc,data);

sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg);

*在调试的时候如果用串口超级终端调试的话,在ARM上显示正常,但是在串口是乱码,不要被迷惑

(6)查询、调用数据库

a. 查询全部

sqlite3_get_table(db, "select * from person", &resultp, &nrow, &ncolumn, &errmsg);

*resultp保存数据库信息,nrow返回列数,ncolumn返回列数

b. 查询部分信息

sqlite3_get_table(db, "select * from person where name='zhang'", &resultp, &nrow, &ncolumn, &errmsg);

c. 变量查询查询

 char data[]="张翼";

 char sql3[100];

 sprintf(sql3,"select * from person where name='zhang';",data);

 sqlite3_get_table(db, sql3, &resultp, &nrow, &ncolumn, &errmsg);

 *查询时使用变量的方法和添加时一样

(7)关闭数据库

 sqlite3_close(db);

搭建QT+Sqlite3嵌入式开发环境 之前我们已经成功搭建了QT嵌入式开发环境接下来我们在这个基础上搭建Sqlite3嵌入式数据库开发环境。 原创文章欢迎转载,请保留出处。 若有任何疑问建议,欢迎回复。 邮箱:Maxwell_nc@163.com 阅读详情

相关推荐

QT SQLite3分页删除问题

terminal实验 场景:我打算在QT SQlite3中使用分页删除操作。即delete 搭配limit。 如下的例子使用limit、offet SQL关键字来实现分页查询。 在terminal中实验: sqlite&gt; select * from test; 1|10 2|20 3|30 sqlite&gt; select * from test order by va...

theArcticOcean 866

linux qt 连接sqlite3,RedHat 9 Linux下在QT3.1中连接SQLite3全过程详细记录

作者:zieckey([email]zieckey@yahoo.com.cn[/email])All Rights Reserved下文介绍的内容都是基于 Linux RedHat 9.0 平台的。1. 说明这里我们假设你已经编译好了sqlite的库文件 :libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3...

weixin_39756895的博客 537

Qt + SQLite3 + VS 开发时出现乱码的解决方法

最近一个项目使用Qt在VS2008中开发一个客户端,由于客户端数据量较小,所以数据库使用的是SQLite3,体积小,速度快,易维护,开箱即用,很好! 开发时,使用SQLite3.exe的客户端操作SQLite的数据库文件,insert和select都没问题,支持中文支持得很好,没有乱码;但 使用SQLite3的控制台insert进去的数据,再用Qt查询出来的时候,全是乱码!

lslxdx的专栏 2544

Linux上sqlite的安装和使用方法以及在QT中如何使用sqlite&笔记总结

(一)sqlite的安装 一、直接用命令安装(需要linux联网) sudo apt-get update sudo apt-get install sqlite3 二、直接编译源码 1、将源码拷贝到Ubuntu的非共享目录解压 源码下载: 链接:https://pan.baidu.com/s/16ZWcXpFzMwW9nBq6dVWs9w 提取码:5r9e 解压命令:tar -xzvf sqlite-snapshot-201708031550.tar.gz 2、直接编译源码 (1)配置 cd

皮皮不调皮的博客 7006

在Qt中同时操作多个数据库的注意事项

对于不同的数据库类型,还需要在数据库名称前添加相应的前缀,例如"QSQLITE"、“QMYSQL"或"QPSQL”。在不再需要连接和操作数据库时,应该及时释放相关的资源。在同时操作多个数据库时,需要明确区分每个数据库连接。可以为每个数据库连接设置一个唯一的连接名称,以便在后续的数据库操作中进行引用。Qt的数据库模块默认是线程安全的,但是在多线程环境中使用时,需要采取适当的措施来确保数据的一致性和安全性。确保在不再使用数据库连接时,及时关闭连接并释放相关资源,以避免资源泄漏和不必要的开销。

ByteProwl的博客 822

QT/C语言 实现数据库sqlite3

QT/C语言 实现数据库sqlite3 【1】引入数据库 【2】下载移植sqlite3 1.移植sqlite3 2.使用sqlite3 3.sqlite3中的数据类型 4.常用的SQL语句(全部都是分号结尾) (1)新建表格 (2)往表格中插入数据 (3)查询表格中的数据 (4)删除表格中的数据 (5)修改表格中的数据 【3】C语言调用sqlite3 1.接口函数介绍 (1)新建/打开数据库文件 (2)数据的操作--》执行SQL语句, 新建表格增删改查 (3)关闭数据库 2.编译命令 【4】QT中数据库有关

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1703

qt sqlite mac 编译配置_Qt操作Sqlite3数据库

SqliteSqlite是一款轻型的数据库,实现了多数SQL-92标准,包括事务(原子性,一致性,隔离性和持久性 ACID),触发器与多数复杂查询。对于一个移动手持设备的应用开发者,Sqlite是居家旅行必备数据库。SQLITE是单机数据库在不同的环境下安装Sqlite3的操作命令以及步骤:在Lunix系统下安装sqlite3 ubuntu下安装1. 在终端下输入以下命令sudo apt-ge...

weixin_39968995的博客 433

OpenClaw Docker 安装问题解决全记录

控制面板无法加载(WebSocket 错误) | 确认 Nginx 配置中的 `Upgrade` 和 `Connection` 头正确 || 网关容器无法启动 | `docker compose logs openclaw-gateway`,检查权限、镜像名 |如需消除,使用 Let's Encrypt |- `<your-token>`:你的 OpenClaw 网关令牌(如 `b0e5ab...`)将 `<nas-ip>` 替换为你的群晖内网 IP(例如 `192.168.1.100`)。

u014490376的博客 2308

qt mysql sqlite3_QT上使用Sqlite3

官网上的sqlite最新是sqlite3的版本,下载了Realese版本的源代码可以学习学习。至于Sqlite,简单说一下它的特性,一个轻量级的十分厉害的数据库,可以和很多编译环境结合。对于QT,QT自带有驱动程序,在包的plugins里面有个sqldrivers就是了。使用Sqlite教程如下,可是学习了其它人优秀的文章总结而出:1.下载sqlite3.exe。这是个命令行使用工具,可以在官网找...

weixin_34915171的博客 333

Robocorp+Robot Framework学习记录【初学者课程:一级课程】

以下内容均来自:https://robotframework.org/?tab=2#getting-started。通过官网的学习和本地实际安装使用体验而来,本文仅记录学习过程。 Robot Framework介绍 Robot Framework 是一个通用的开源自动化框架。它可用于测试自动化和机器人过程自动化 (RPA)。 Robot Framework环境配置及安装 具体请见:Win10环境下安装pytho、pip与Robot Framework 学习过程与等级划分 官方认为Robot Framew.

OwenDom的博客 5374

QT的温湿度显示系统

大家好,这里是石侃侃的博客,欢迎前来讨论这篇文章介绍的是DHT11在2440上的基于Qt5.6的应用基于单片机系统的温湿度监测系统构成框图如图2-1所示。图2-1 系统构成框图该系统采用单片机s3c2440作为了本设计的核心元件。利用LCD作为了显示器件,利用触摸屏作为用户界面输入设备,第一行显示当前实时的温度,湿度,第二行依次显示历史时刻最高的温度值,最高的湿度值。第三行是一个文本框,记录了程...

zxpcus的博客 1万+

qt+sqlite3

   目前想学习下sqlite数据库编程。之前在开发板上运行Qt程序时,出现了只能读数据库,不能进行写入的情况。在网上查得可以不使用Qt自带的数据库,重新编译一个sqlite3库,然后在Qt中使用这个库就可以了。为了使学习的更为全面,报着认真敲代码的态度,我将这个学习过程以博客的形式写出来。对程序中可能出现的问题,尽量不留死角。同时,在后面尽量解决以前遇到的问题。    现在开发工具如下:    ...

逍遥的博客 9465

【自动驾驶学习笔记——Prescan和Simulink 学习笔记和问题记录(1)】

主要记录一些Prescan/Simulink 联合仿真出现的问题。

ly1336545868的博客 1465

【QT】 qt中使用sqlite3

本文介绍了 Qt 中数据库的使用方法,包括支持的数据库驱动、QSqlDatabase、QSqlQuery 等核心类的使用,并通过完整案例实现了图书管理系统(含增删改查)和用户登录注册系统(含密码加密存储)。

weixin_56167571的博客 1810

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5577

遗传算法详解 附python代码实现

遗传算法 遗传算法是用于解决最优化问题的一种搜索算法。从名字来看,遗传算法借用了生物学里达尔文的进化理论:”适者生存,不适者淘汰“,将该理论以算法的形式表现出来就是遗传算法的过程。 问题引入 上面提到遗传算法是用来解决最优化问题的,下面我将以求二元函数: def F(x, y): return 3*(1-x)**2*np.exp(-(x**2)-(y+1)**2)- 10*(x/5 - x**3......

ha_ha_ha233的博客 22万+

<二> Qt更新sqlite3插件

今天在Qt的帮助手册里看到,可以用自己编译的sqlite库来替换qt源码中所带的sqlite。这样就好办了,可以更新Qt的sqlite3插件,编程的时候直接用Qt的数据库语句,上一章中用sqlite3的函数来编程,总感觉怪怪的。毕竟是写Qt sqlite程序,应该写成Qt的风格,后面使用Qt的数据模型就比较方便。     上一章中已经说了sqlite3源码的编译,这里我把通过交叉编译后安装在虚拟

westlor的专栏 2363

surfer10与Arcgis10.3 完美生成等值线和等值面方法

surfer10 与Arcgis10.3生成等值线和等值面的步骤如下: 1.准备surfer用的Book1.dat文件,格式如下: "x" "y" "z" 116.471992 40.809975 232 116.335556 40.700542 1235 116.541626 40.713333 214 116.73349 40.798607 566 2.在surfer中,选择Gr

哈里·雪利博客 1万+

SQLite3(3):Qt中使用SQLite3

本文介绍了Qt数据库相关类,并总结了Qt操作数据库的基本操作流程,最后进行了基本应用的代码实验。

weixin_42937740的博客 1503

[Python图像处理] 十.形态学之图像顶帽运算和黑帽运算

数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、骨架抽取、极限腐蚀、击中击不中变换、形态学梯度、Top-hat变换、颗粒分析、流域变换等。本篇文章主要讲解Python调用OpenCV实现图像形态学转化,包括图像顶帽运算和图像黑帽运算,基础性知识希望对您有所帮助。

杨秀璋的专栏 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

QT中使用sqlite3数据库

这条语句,那么我们在文件中是看不到这个数据库文件的,因为他是一个空的文件,并没有进行任何操作,查看这个数据库文件并不是在工程目录下,而是要在如图目录下才能看见这个数据库。此时这个数据库里是没有表的 ,进入cmd,进入所在的盘,然后加上\test.db数据库文件名,使用.tables命令查看到,这里是没有表的。在QT中要想使用sqlite3数据库,首先我们要引入sql类库,在pro工程文件中引入sql,QT += sql。这里我们就看到了这个文件,如果不加db.open()的效果大家可以试试。

m0_72647108的博客 4027

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt5中Sqlite3的使用示例

sqlite3是一款小型轻量级数据库,它占用资源非常的低,相比Mysql等数据库,其处理速度更快,目前已经广泛应用于嵌入式产品中。 下面介绍,如何在QT5中对sqlite3数据库进行操作。 一、在.pro工程文件中添加sql模块 QT += sql 二、包含相关头文件 #include <QtSql/QSqlDatabase> #in...

fangye945a的博客 4078

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Win10下在Qt项目中配置SQlite3环境

此电脑--》系统属性--》高级系统设置--》环境变量--》系统变量(选中Path)--》编辑--》新建--》输入路径 我的是:D:\SoftSetup\Sqlite3。将所有文件放在某一路径下的文件夹: 我就放在: D:\SoftSetup\Sqlite3。(2)在当前目录:D:\SoftSetup\Sqlite3, 直接输入cmd,回车。然后回到,sqlite3所在的文件夹:D:\SoftSetup\Sqlite3。(3)win + S 打开界面,输入cmd,即可打开窗口。

weixin_70822378的博客 2214

qt环境下sqlite3教程

本操作在qt环境下完成。 1、添加sqlite3的源代码文件,sqlite3.cpp和sqlite3.h。这两个文件可以在网上自己下载。 2、Pro文件中添加 LIBS+=-ldl。 常用指令讲解: 1. sqlite3_open():打开数据库 int sqlite3_open( const char *filename, /*数据库名称 (UTF-8) */ sqlite3 *ppDb / 数据库句柄 */ ); int sqlite3_open16( const void *f

weixin_43246170的博客 3993

qt连接mysql和sqlite3_Qt操作Sqlite3数据库

SqliteSqlite是一款轻型的数据库,实现了多数SQL-92标准,包括事务(原子性,一致性,隔离性和持久性 ACID),触发器与多数复杂查询。对于一个移动手持设备的应用开发者,Sqlite是居家旅行必备数据库。SQLITE是单机数据库在不同的环境下安装Sqlite3的操作命令以及步骤:在Lunix系统下安装sqlite3 ubuntu下安装1. 在终端下输入以下命令sudo apt-ge...

weixin_39677538的博客 322

Qt中SQLite3的增、删、改、查操作

QT对数据库具有完善的支持,不需要加任何其他插件就可以直接使用,但是如果你要是加了sqlite3插件,调用数据库就跟直接调用一个驱动一样,直接调用接口函数:open、close、……,换言之QT自带的数据库语言就用不上了。

System Architect 2万+
上一篇: QML各个属性详解
下一篇: Qt之QTextCodec乱谈
lixingworkCCC
博客等级 码龄15年 24粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值