Qt sqlit3的增、删、改、查、判断等基本操作接口

1、Qt sqlit3简介

Qt SQLite(sql)是一款不需要服务器的开源轻量级的数据库软件,可以集成在其他软件中,适合嵌入式系统应用。Qt5以上版本直接支持SQLite。具体的特性和语法可以参考RUNOOB. 这里我把自己项目中用到的基本操作函数贴出来。

这里主要介绍操作接口:

  1. 连接sqlit数据库
  2. 关闭sqlit数据库
  3. 判断sqlit表格是否存在
  4. 判断是否表中某个字段存在某个值
  5. 判断sqlit表中是否存在sysid
  6. sqlit新建表
  7. sqlit插入项目
  8. 删除sqlit指定表中指定项目中指定的内容
  9. 更新sqlit表中的内容

2、使用方法

在工程配置文件.pro中添加QT对sqlit的支持。

QT += sql

3、接口文件

3.1 连接sqlit数据库

static bool connectMyDB()
{QString dbName = "MysqliteDB";QString dbuser = "jianwang16";QString dbpassword = "password123456";if(QSqlDatabase::contains(dbName)){//如已经打开这个数据库,直接调出这个数据连接database = QSqlDatabase::database(dbName);}else{//否则打开这个数据库,注意带上数据库名database = QSqlDatabase::addDatabase("QSQLITE");database.setDatabaseName(dbName);database.setUserName(dbuser);database.setPassword(dbpassword);}if (!database.open()){QMessageBox::critical(NULL, "错误", " Unable to establish a database connection!!! ", QMessageBox::Cancel, QMessageBox::Cancel);qDebug() << "Error: Failed to connect database." << database.lastError();return false;}else{qDebug()<<"数据库打开成功!";return true;}

3.2 关闭sqlit数据库

static void closeMyDB()
{database.close();
}

3.3 判断sqlit表格是否存在

static bool isExistTable(const QString& strTableName)
{if(connectMyDB()){QStringList tables = database.tables(); //获取数据库中的表qDebug() <<QString("表的个数: %1").arg(tables.count()); //打印表的个数QStringListIterator itr(tables);while (itr.hasNext()){QString tableName = itr.next();qDebug() << "表名:"+ tableName;if(tableName==strTableName)return true;}return false;}
}

3.4 判断是否表中某个字段存在某个值

static bool isExist(const QString& strTableName, const QString& strFieldName,const QString& text)
{if(connectMyDB()){QSqlQuery query;QString strSql = QString("SELECT 1 FROM %1 WHERE %2     ='%3'").arg(strTableName).arg(strFieldName).arg(text);//select fromquery.prepare(strSql);if(query.exec()){qDebug()<<strSql<<"成功";query.next();qDebug()<<"返回内容"<<query.value(0).toString();if(query.value(0).toInt()){qDebug()<<"当前表中存在字段"<<text;return true;}else{qDebug()<<"当前表中不存在字段"<<text;return false;}}else{qDebug()<<strSql<<"失败";}}
}

3.5 判断sqlit表中是否存在sysid

*说明:System_ID是我表中的字段。一下函数的意思是判断我的某个表中System_ID是否存在这个sysid。

static bool isExistSystemID(const QString& strTableName, const QString& sysid)
{if(connectMyDB()){QSqlQuery query(database);QString sql = QString("select 1 from %1 where System_ID ='%2'").arg(strTableName).arg(sysid);query.prepare(sql);qDebug()<<sql;if(!query.exec()){qDebug()<<query.lastError();return false;}else{query.next();int nResult = query.value(0).toInt();//有此字段时返回1,无字段时返回nullqDebug()<<"query.value(0).toInt():"<<QString::number(query.value(0).toInt());query.clear();if(nResult){return true;}else return false;}}

3.6 sqlit新建表

static void creatTable(const QString& strTableName)
{QSqlQuery query;if (!query.exec(QString("CREATE TABLE %1(""id INTEGER PRIMARY KEY AUTOINCREMENT,"//主键"System_ID VARCHAR,"//系统ID"User_ID VARCHAR,"//用户ID"SubMeter_Num VARCHAR,"//子表序号"CMD_Time VARCHAR)").arg(strTableName))){qDebug() <<"Create"<< strTableName<<"Table Failed!";}else{qDebug() << "Create"<< strTableName<<"Table OK!";}
}

3.7 sqlit插入项目

static void addIterm( const QString& strTableName,const QString& System_ID,const QString& User_ID,const QString& DTU_ID,const QString& SubMeter_Num)
{QSqlQuery query(database);QString select_max_sql =QString("select max(id) from %1").arg(strTableName);qDebug()<<select_max_sql;//查询最大idint max_id = 0;query.prepare(select_max_sql);if(!query.exec()){qDebug()<<"最大ID错误"<<query.lastError();}else{while(query.next()){max_id = query.value(0).toInt();qDebug()<<QString("max id:%1").arg(max_id);}}//绑定参数query.prepare(QString("INSERT INTO %1 VALUES(""?,"//id, ""?," // "System_ID, ""?,"// "User_ID,""?,"// "DTU_ID,""?"// "SubMeter_Num,"")").arg(strTableName));query.addBindValue(max_id+1);query.addBindValue(System_ID);query.addBindValue(User_ID);query.addBindValue(DTU_ID);query.addBindValue(SubMeter_Num);bool bResult = query.exec();qDebug() << "addIterm result=" << bResult;}

3.8 删除sqlit指定表中指定项目中指定的内容

static bool deleteiterm(const QString& tablename, const QString& item, const QString & text)
{if(connectMyDB()){QSqlQuery query(database);QString delete_sql = QString("delete from %1 where %2 = ?").arg(tablename).arg(item);query.prepare(delete_sql);query.addBindValue(text);if(!query.exec()){qDebug()<<query.lastError();return false;}else{qDebug()<<"deleted!";return true;}}else  return false;
}

3.9 更新sqlit表中的内容

static void updateitem( const QString& strTableName,const QString& systemid,const QString& User_ID,const QString& DTU_ID,const QString& SubMeter_Num)
{if(connectMyDB()){QSqlQuery query(database);query.prepare(QString("UPDATE  %1 SET ""User_ID = :User_ID,""DTU_ID = :DTU_ID,""SubMeter_Num = :SubMeter_Num,"WHERE System_ID = %2").arg(strTableName).arg(systemid));query.bindValue(":User_ID",User_ID);query.bindValue(":DTU_ID",DTU_ID);query.bindValue(":SubMeter_Num",SubMeter_Num);if(query.exec()){qDebug()<<"更新成功";}else{qDebug()<<"更新失败";}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECNUOJ 2143 端午节快乐

端午节快乐 Time Limit:1000MS Memory Limit:65536KBTotal Submit:1720 Accepted:868 Description 有一段有趣的传说。公元前340年&#xff0c;爱国诗人、楚国大夫屈原&#xff0c;面临亡国之痛&#xff0c;于五月五日&#xff0c;悲愤地怀抱大石投汩罗江&#xff0c;为了不使鱼…

Linux下通过命令设置系统时间

Linux下通过命令设置系统时间&#xff1a; date -s "09/22/2012 09:30:30" clock -w

教你看编号选希捷硬盘

对于大部分消费者而言&#xff0c;很多人在选购硬盘时&#xff0c;都会把注意力集中在硬盘的容量上&#xff0c;而近期一些用户也会注意到硬盘的接口&#xff08;IDE或者是SATA&#xff09;等方面&#xff0c;但是&#xff0c;硬盘的性能并不仅仅表示在容量以及接口上&#xff…

一键圣诞帽 html5源码,HTML5在线教程之微信小程序“圣诞帽”的实现思路详解

HTML5在线教程之微信小程序“圣诞帽”的实现思路详解大家应该还记得微信小程序“圣诞帽”吧&#xff0c;在圣诞的那几天可谓是非常的火爆&#xff0c;大家都争相使用&#xff0c;本篇文章小编给大家分享一下微信小程序“圣诞帽”的实现思路详解&#xff0c;对此感兴趣的小伙伴随…

STM32 应用程序加密的一种设计方案

0、前言 STM32编译后的代码存在FLASH中&#xff0c;通过外部工具可以读出来全部数据&#xff0c;一旦硬件抄板一样&#xff0c;再将FLASH数据全部拷贝至抄板单片机中&#xff0c;既可以完全实现硬件和软件功能抄袭。因此&#xff0c;需要对自己的应用程序加密&#xff0c;即使…

使用HTML5实现刮刮卡效果

http://www.helloweba.com/view-blog-270.html转载于:https://www.cnblogs.com/wln3344/p/4618226.html

两块网卡实现多台机器共享上网

组建局域网内部网络&#xff0c;遇到的问题&#xff1a;购买电信的宽带&#xff0c;多人拨号肯定是不行的(貌似同时超过4台机器拨一个号就自动被断开网络了)。 使用一些软件共享上网觉得既然是人家开发的软件&#xff0c;不太放心里面加了什么代码会监控这边的网络&#xff0c;…

mount: unknown filesystem type 'LVM2_member'解决方案

From: http://hi.baidu.com/williwill/item/7a36fdd92340b2ee55347f13 系统启动到request_module: runaway loop modprobe binfmt-464c挂起 利用U盘系统&#xff0c;挂载硬盘出现&#xff1a;mount: unknown filesystem type LVM2_member 解决办法&#xff1a; 需要安装 lvm2:…

计算机专业英语的题目,计算机专业英语题目

比较题1.SRAM and DRAM*RAM is short for random access memory.Static RAM(SRAM) keeps data in the main memory,without frequent refreshing,for as long as power is supplied to the cicuit. SRAM is very fast but it is much more expensive than DRAM and takes more …

HC-05蓝牙模块的配置和使用方法

一、说明 蓝牙传输模块一般通过串口进行通信&#xff0c;即RS232&#xff08;设备1&#xff09;<—>蓝牙模块<—>蓝牙模块<—>RS232&#xff08;设备2&#xff09;。因此&#xff0c;使用蓝牙模块需要配置的参数有串口通信参数和蓝牙通信参数。HC05蓝牙模块…

Anton Chuvakin:关于日志管理产品的十个注意事项

SecurityWarrior Consulting的Anton Chuvakin博士在去年底的时候写过一篇文章&#xff1a;Top 10 Things Your Log Management Vendor Won’t Tell You&#xff0c;很有意思。实际上&#xff0c;他提醒用户在选择日志审计产品&#xff0c;尤其是用它来做内控的目的的时候应该注…

zlib库compress和uncompress函数的使用方法

From: http://blog.csdn.net/turingo/article/details/8148264 zlib(http://zlib.net/)提供了简洁高效的In-Memory数据压缩和解压缩系列API函数&#xff0c;很多应用都会用到这个库&#xff0c;其中compress和uncompress函数是最基本也是最常用的。不过很奇怪的是&#xff0c;…

Python字符串的encode与decode研究心得乱码问题解决方法

Python字符串的encode与decode研究心得乱码问题解决方法 为什么Python使用过程中会出现各式各样的乱码问题&#xff0c;明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式&#xff1f; 为什么会报错“UnicodeEncodeError: ascii codec cant encode characters in posi…

嵌入式开发中关键字_IO 和 volatile的用法

一、描述 在开发嵌入式过程中&#xff0c;常会看到_IO 修饰符&#xff0c;这两个修饰符是在Core_cm3.h中被重定义&#xff1a; /* IO definitions (access restrictions to peripheral registers) */ #ifdef __cplusplus#define __I volatile /*!< defi…

table简单排序

早些时候基于jQuery写的一个table排序&#xff0c;暂时只支持简单的数据类型排序。以后有时间改写成原生js的 直接上代码了&#xff0c;写的不好&#xff0c;纯属记录 tabletable 浏览评论主题作者最后评论 共有精品数200个10023232北京的天气真是干燥&#xff0c;让人觉得不舒…

html循环c for,两层c:forEach循环嵌套

jsp中两级菜单如何用c:forEach输出items要被循环的信息否无begin开始的元素(0第一个元素&#xff0c;1第二个元素)否0end最后一个元素(0第一个元素&#xff0c;1第二个元素)否Last elementstep每一次迭代的步长否1var代表当前条目的变量名称否无varStatus代表循环状态的变量名称…

Gvim 字体大小设置和FencView插件安装

1. GVim更改字体及大小 在命令模式下输入: set guifontlucida\ console:h14 其中&#xff0c;字体名有空格的话&#xff0c;要转义下. 2. FencView插件(Ver4.8)下载位置&#xff1a; http://vim.sourceforge.net/scripts/download_script.php?src_id17381 解压出来后&am…