Qt中利用SQL对数据库的操作和prepare()函数的使用

Qt数据库的初学说明

Qt中可以建立一个数据库,比如:QSqlDatabasedb;这是一个数据库对象db,在操作之前我们需要用QSQLITE去驱动它链接它,db=QSqlDatabase::addDatabase("QSQLITE");然后可以设置他的名字db.setDatabaseName(“”),再到后面我们可以打开它db.open(),打开成功后我们可以对他进行某些操作比如查询:那么又像对文件操作一样,我们得新建一个QSqlQuery Sql对象,然后他负责对数据库的所有操作!包括读,写,删除,添加等等。QT中的SQL中QQuery对象对数据库操作分为两步,先是用prepare()函数准备,然后调用exec()函数去执行,执行结果就是该函数的返回值。

有关数据库的更多操作在下面的链接中都有给出:

http://blog.163.com/wenwen10090215@126/blog/static/173322114201261784889/

Qt之数据库操作:

http://blog.sina.com.cn/s/blog_a6fb6cc90101gx30.html

http://blog.csdn.net/fer_ba/article/details/4582205

还有在SQL语法问题可以在以下链接中寻找:

http://www.w3school.com.cn/sql/sql_where.asp

由于SQL语法大部分都是在prepare()中实现的,下面主要说明prepare()的用法!和标准的SQL还是有区别的

Qt中prepare()用法:

说明:为什么需要要绑定:这是因为在prepare()中虽然是标准的SQL指令,但是对于具体的数值类的量不可能在string表示出来,那么不能表示的量就用?代替,这样就需要额外添加绑定指令addBindValue(),把prepare()中用?表示的量替换成相对应的数值量(int,floaat,QString等等),而且替换是是按照?出现顺序替换的,然后在执行exec()时就可以更新到数据库中或者可以用:string而不用?(string就代表一个字符串而已),这时我们可以用bindValue(“:string”,value);去绑定数据单,然后更新,这个就可以不按照出现顺序绑定。但是:string一定是和它要替换的列的值对应的。而且绑定还可以省略,也就是设为NULL。

创建表:

”CREATE TABLE Table_Name (item1 int,item2 varchar(30),item3float,……)“

说明:Table_Name是你要建的表的名字,item1,item2.等等表示表中的列,每个item后面的表示该列数据性质。注意括号里不可为空,因为空表是不可以创建成功的。

例如:  sql_query.prepare("CREATETABLEPersons1(id  int,name  varchar(30),slary  int,ageint)");

在表中插入新行

“INSERT INTO Table_Name (item1,item2,item3...) VALUES(?,?,?...)”

“INSERT INTO Table_Name(item1,item2,item3...) VALUES (:id,:name,:etc...)”

在使用prepare()函数后,我们还得使用addBindValue(value)按照上面的item顺序来绑定值,具体值为value(该值一定要和对应的item想对应)!!!绑定成功后调用exec()就可以执行插入操作,写入数据库,成功与否就看exec()返回值了。

例如:用第一种方法绑定
sql_query.prepare("INSERTINTOPersons(id,name,slary)VALUES(?,?,?)");
sql_query.addBindValue(2);
sql_query.addBindValue("taopeng");
sql_query.addBindValue(25);
if(sql_query.exec())
或者:第二种方法:
sql_query.prepare("INSERTINTOPersons(id,name,age)VALUES(:id,:name,:bbb)");
sql_query.bindValue(":id",4);
sql_query.bindValue(":name","taopeng");
sql_query.bindValue(":bbb",25);

:bbb其实不重要,只不过是相当与一个标识符,而age,或者name这些是比较重要的,他们指定了插入的列。

更新

“UPDATE  Table_Name SET  item1= ?,item2 =?  WHERE id = ?”

同样也是绑定

例如:
sql_query.prepare("UPDATEPersonsSETage=?,name=?WHEREid=?");
sql_query.addBindValue(18);
sql_query.addBindValue("taoxiaopeng");
sql_query.addBindValue(1);
sql_query.exec();
或者:
sql_query.prepare("UPDATEPersonsSETage=:age,name=:hahaWHEREid=:hehe");
sql_query.bindValue(":age",18);
sql_query.bindValue(":haha","taoxiaopeng");
sql_query.bindValue(":hehe",4);
sql_query.exec();

删除

“DELETE FROM Table_Name Whereitem = ?”

“DELETE FROM Table_Name Whereitem = :item”

例如:
sql_query.prepare("DELETEFROMPersonsWHEREid=:hehe");
//sql_query.bindValue(":age",30);
//sql_query.bindValue(":haha","taoxiaopeng");
sql_query.bindValue(":hehe",4);或者
sql_query.prepare("DELETEFROMPersonsWHEREid=?");
//sql_query.bindValue(":age",30);
//sql_query.bindValue(":haha","taoxiaopeng");
sql_query.addBindValue(3);
//sql_query.bindValue(":hei",18);

AND 和OR

这个主要用在WHERE中指定查表或者删除时的条件。

查询选取

SELECT * FROM Table_Name // 选取所有列

SELECT item,item1,item2 FROMTable_Name//选取item,item1,item2这些列。

而读取结果可以用value()函数读取,参数可以是QString :”item”,”item1”,或者是整型数据,整型数据表示该列是表中的第几列(从0开始)。

例如:sql_query.prepare("SELECT*FROMPersons");if(sql_query.exec()){qDebug()<<"readsuccessfully";while(sql_query.next()){intid=sql_query.value("id").toInt();qDebug()<<"id:"<<id;QStringname=sql_query.value("name").toString();qDebug()<<"name:"<<name;intsalary=sql_query.value("slary").toInt();qDebug()<<"salary:"<<salary;intage=sql_query.value("age").toInt();qDebug()<<"age:"<<age;}}else{qDebug()<<"insertfailed";}

注意:为了显示每一个条目用了while(sql_query.next()),因为第一次读出来sql_query是指在一个空的地区,不是表中第一个条目。所以用next()可以正确显示。

Qt中SQL QSqlQuery 对象中prepare() 函数的用法相关推荐

  1. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  2. [转载] python中string函数的用法_python中string模块各属性以及函数的用法

    参考链接: Python中的string.octdigits 任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作. python的字符 ...

  3. js基础知识:es6中,当对象中的key名称为一个变量时,需要用`[]`括起来

    es6中,当对象中的key名称为一个变量时,需要用[]括起来

  4. R语言中实现作图对象排列的函数总结

    文章目录 par(mfrow=c(n,m))基础作图 gridExtra::grid.arrange()针对ggplot对象 用法 实例 ggpubr::ggarrange()可处理ggplot对象和 ...

  5. js中bind、call、apply函数的用法

    最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web 的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站. ...

  6. Python函数式编程中map()、reduce()和filter()函数的用法

    Python中map().reduce()和filter()三个函数均是应用于序列的内置函数,分别对序列进行遍历.递归计算以及过滤操作.这三个内置函数在实际使用过程中常常和"行内函数&quo ...

  7. 自己实现java I/O中的BufferedReader对象中的raedLine方法

    import java.io.*; /* readLine方法的原理是将除回车符以外的字符全部存储到一个字符数组中(本例中用StringBuilder代替),等到读完一行后将其返回 自己编写一个Buf ...

  8. python中strip()、lstrip()、rstrip()函数的用法详解

    一.strip()函数的简单应用 1.strip()函数 Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. 注意:该方法只能删除开头或是结尾的字符,不能 ...

  9. java中sql语句_java中sql语句的编写规则

    java中sql语句的编写规则 发布时间:2020-06-26 15:11:11 来源:亿速云 阅读:143 作者:Leah 这期内容当中小编将会给大家带来有关java中sql语句的编写规则,文章内容 ...

最新文章

  1. IDEA下使用Jetty进行Debug模式调试【含演示GIF图】
  2. 我为什么不用do{}while()
  3. 【组合数学】生成函数 ( 性质总结 | 重要的生成函数 ) ★
  4. elasticsearch index doc过程概述
  5. Eclipse连接数据库MySQL以及一些有关数据库的知识
  6. c++编译时候fatal error C1075: end of file found before the left brace '{' at
  7. c gui qt 4编程第二版_我的QT5学习之路(一)——浅谈QT的安装和配置
  8. iview表格嵌套Tooltip
  9. 商城系统PageBean分页 Cookie存储浏览记录
  10. 工作中遇到的问题——数据库
  11. 网络间谍在2017年被列为全球企业最为严重的威胁
  12. Java面试应该准备的知识点系列一
  13. XSD文件详解(以Maven为例)
  14. 计算机组装与维护李毅,青春力量 | 优秀校友李毅专访
  15. bitvise ssh client 连接linux,推荐SSH客户端Bitvise SSH Client
  16. linux怎么找宝塔地址,宝塔Linux面板安全入口地址忘了(方法一)
  17. [MICO开发帖]MICOkit-Nucleo2.0开发连载贴——1、Micoder开发环境汉化
  18. cml sml区别_cml和sml的区别
  19. [转]量化必读:Tick 数据到底是什么?为什么很难找到可靠的交易数据?
  20. RAM flash和eeprom存储器的区别和作用

热门文章

  1. openfeign接口启动报错: is not assignable to interface feign.hystrix.FallbackFactory
  2. C语言入门最基础教学(编译器下载)
  3. C++:内存管理:C++内存管理详解
  4. GameObject的Active与InActive activeSelf, activeInHierarchy, SetActiveRecursively
  5. 打造任何地方都能使用的markdown写作软件:Typora云端化
  6. Djongo框架+Vue问题总结
  7. python生产环境部署
  8. 财经数据----同花顺技术选股,附代码
  9. java 时间戳最大值_Java中在时间戳计算的过程中遇到的数据溢出问题解决
  10. 计算机会考作业,计算机会考Excel操作题作业文档.doc