广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Qt+sqlite3
  • 323
分享到

Qt+sqlite3

Qt 2023-01-31 07:01:43 323人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

之前在PC机上用Qt编译数据库,已经成功,本来以为直接移植到ARM上就可以用的,没想到遇到了莫名其妙的问题,到现在都搞不定。所以暂时先用sqlite3插件的方法完成任务再说,希望有用QT做数据库的大牛们帮忙看看问题所在,也随便记录一下sql

之前在PC机上用Qt编译数据库,已经成功,本来以为直接移植到ARM上就可以用的,没想到遇到了莫名其妙的问题,到现在都搞不定。所以暂时先用sqlite3插件的方法完成任务再说,希望有用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);

 

--结束END--

本文标题: Qt+sqlite3

本文链接: https://www.lsjlt.com/news/191040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt+sqlite3
    之前在PC机上用QT编译数据库,已经成功,本来以为直接移植到ARM上就可以用的,没想到遇到了莫名其妙的问题,到现在都搞不定。所以暂时先用sqlite3插件的方法完成任务再说,希望有用QT做数据库的大牛们帮忙看看问题所在,也随便记录一下sql...
    99+
    2023-01-31
    Qt
  • struct sqlite3
    struct sqlite3{  sqlite3_vfs *pVfs;              struct Vdbe *pVdbe;             CollSeq *pDfltColl;             sqlite3...
    99+
    2023-01-31
    struct
  • SQLite3 of python
    SQLite3 of python 一、SQLite3 数据库   SQLite3 可使用 sqlite3 模块与 Python 进行集成,一般 python 2.5 以上版本默认自带了sqlite3模块,因此不需要用户另外下载。 在 ...
    99+
    2023-01-31
    python
  • SQLite3 笔记
    SQLite insert 插入一行: 插入一组: 使用select结果插入 多行插入到新表: 多行插入到新表,一步到位: 非常有用的临时表: sqlite update 更新一条记录: update 注意 约束 sqlite ...
    99+
    2023-01-31
    笔记
  • sqlite3 出错
    错误如下:Undefined symbols for architecture i386:  "_sqlite3_close", referenced from:      -[DatabaseOperation closeDatabase...
    99+
    2023-01-31
  • django sqlite3 error
    如果出现下面错误:django.core.exceptions.ImproperlyConfigured: Error loading pysqlite2 module: No module named pysqlite2请安装...
    99+
    2023-01-31
    django error
  • python3.4 之sqlite3,
    python3.4导入sqlite3是报错,如下:>>> import sqlite3Traceback (most recent call last):  File "<input>", line 1, in...
    99+
    2023-01-31
  • python 使用sqlite3
    Sqlite是一个轻量级的数据库,类似于Access.一、 安装Python 2.5开始提供了对sqlite的支持,带有sqlite3库.没有sqli...
    99+
    2023-01-31
    python
  • sqlite3 学习笔记
    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @descrip : operate SqLite intrface # @Time : 2020/04/22 21:57 # @Au...
    99+
    2017-12-28
    sqlite3 学习笔记 数据库入门 数据库基础教程
  • sqlite3安装方法
    sqlite3安装方法官网:http://www.sqlite.org这里不是安装包的形式,下载后是下面这2个文件:解压到同一目录下即可,如图:"安装"完成后,记得添加系统环境变量,以便命令行式的操作,然后...
    99+
    2022-10-18
  • 怎么使用SQLite3
    这篇文章主要讲解了“怎么使用SQLite3”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用SQLite3”吧!开始使用这个功能强大且通用的数据库吧。应...
    99+
    2022-10-18
  • sqlite3使用总结
           OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里。OS X包装的是第三版的SQLite,又称SQLite3。这套软件有几个特色:软件属于公共财(public domain),SQLite可说...
    99+
    2023-01-31
  • Android使用SQLITE3 WAL
    sqlite是支持write ahead logging(WAL)模式的,开启WAL模式可以提高写入数据库的速度,读和写之间不会阻塞,但是写与写之间依然是阻塞的,但是如果使用默认的TRUNCATE模式,当写入数据时会阻塞android中其他...
    99+
    2023-01-31
    Android WAL
  • Sqlite3详细解读
    Sqlite3详细解读"代码下载:SQLite3_2013_0402详细版.zip" http://vdisk.weibo.com/s/Gb9Qi***数据库***严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的...
    99+
    2023-01-31
    详细
  • sqlite3常用命令以及django如何操作sqlite3数据库
    一、如何进入sqlite3交互模式进行命令操作?1、确认sqlite3是否已经安装进去python命令行,执行>>> import sqlite3 >>&g...
    99+
    2022-10-18
  • 24 Python的sqlite3模块
    概述         在上一节,我们介绍了Python的shutil模块,包括:shutil模块中一些常用的函数。在这一节,我们将介绍Python的sqlite3模块。sqlite3模块是Python中的内置模块,用于与SQLite数据库交...
    99+
    2023-10-08
    python sqlite 数据库 sqlite3模块
  • python sqlite3 的使用,性
    sqlite3 的使用,性能及限制python 中使用sqlite3首先是基本的使用:# coding=utf8 __author__ = 'Administrator' # 导入模块,在 python 中是已经内置了这个模块,所以就不...
    99+
    2023-01-31
    python
  • SQLite3数据库读写
    //插入数据 #include "CppSQLite3.h" #include <io.h> CppSQLite3DB db; BOOL re = _access("config.db", 0);//判文件是否存在 if (re...
    99+
    2023-01-31
    数据库
  • SQLite3中文编码 Python
    读取十万多条文本写入SQLite类型数据库,由于文本中存在中文字符,插入到数据库没错,取出时一直是UnicodeDecodeError,导致折腾了一天。  最后的解决方法: Python连接数据时进行如下设置: db=sqlite3....
    99+
    2023-01-31
    中文 Python
  • python操作sqlite3小结
    使用默认模块sqlite3 使用sqlite3模块的connect方法来创建/打开数据库,需要指定数据库路径,不存在则创建一个新的数据库 导入模块 import sqlite3 建立连接 con = sqlite3.connec...
    99+
    2023-01-31
    小结 操作 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作