【转载】QT MySQL数据库操作总结
转载自http://blog.chinaunix.net/uid-28194872-id-3631462.html
#include <QtSql>
QT += sql
QSqlDatabase类实现了数据库连接的操作
QSqlQuery类执行SQL语句
QSqlRecord类封装数据库所有记录
QSqlDatabase类
- QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
- db.setHostName("localhost"); //数据库主机名
- db.setDatabaseName("scott"); //数据库名
- db.setUserName("stott"); //数据库用户名
- db.setPassword("tiger"); //数据库密码
- db.open(); //打开数据库连接
- db.close(); //释放数据库连接
建立数据库文件
- QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName("database.db");
- if (!db.open())
- {
- qDebug("数据库不能打开");
- }
- return false;
- 建立数据库文件后创建表并插入两条数据
- QSqlQuery query;
- query.exec("create table student(id INTEGER PRIMARY KEY autoincrement,
- name nvarchar(20), age int)"); //id自动增加
- query.exec("insert into student values(1,'小明', 14)");
- query.exec("insert into student values(2,'小王',15)");
QSqlQuery类
插入值到数据库操作
一、直接用SQL语句插入(参照上面)
二、利用预处理方式插入(ORACLE语法和ODBC语法)
适合插入多条记录,或者避免将值转换成字符串(即正确地转义),调用prepare()函数指定一个包含占位符的query,然后绑定要插入的值
ORACLE语法
- QSqlQuery query;
- query.prepare("INSERT INTO T_STUDENT (name, age) VALUES (:name, :age)"); //准备执行SQL查询
- query.bindValue(":name", "小王"); //在绑定要插入的值
- query.bindValue(":age", 11);
- query.exec();
ODBC语法
- QSqlQuery query;
- query.prepare("INSERT INTO T_STUDENT (name,age) VALUES (?,?)"); //准备执行SQL查询
- query.addBindValue("小王"); //在绑定要插入的值
- query.bindValue(11);
- query.exec();
三、批量插入到数据库中
- QSqlQuery query;
- query.prepare(“insert into student values (?, ?)”);
- QVariantList names;
- names << "小王" << "小明" << "小张" << "小新"; // 如果要提交空串,用QVariant(QVariant::String)代替名字
- query.addBindValue(names);
- QVariantList ages;
- ages << 11 << 13 << 12 << 11;
- query.addBindValue(ages);
- if (!q.execBatch()) //进行批处理,如果出错就输出错误
- qDebug() << q.lastError();
查询数据库操作
- QSqlQuery query;
- query.exec("SELECT * FROM t_STUDENT"); // 查询的结果可能不止一条记录,所以我们称之为结果集
- while (query.next())
- {
- QString name = query.value(0).toString(); //取第i条记录第1个字段(从0开始计数)的结果
- int age = query.value(0).toInt(); //取第i条记录第2个字段的结果
- // ... 处理name,age变量数据
- }
seek(int n) :query指向结果集的第n条记录。指定当前的位置
first() :query指向结果集的第一条记录。
last() :query指向结果集的最后一条记录。
next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record() :获得现在指向的记录。
value(int n) :获得属性的值。其中n表示你查询的第n个属性
int rowNum = query.at(); //获取query所指向的记录在结果集中的编号
int fieldNo = query.record().indexOf(“name”); //返回"name"的列号
int columnNum = query.record().count(); //获取每条记录中属性(即列)的个数
事务操作
操作函数:transaction(),commit()提交,rollback()回滚
操作事务前,先判断该数据库是否支持事务操作。hasFeature是QSQLDriver类函数
- if (QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){ ... } //
插入一条记录,然后提交事务
- QSqlDatabase::database().transaction();
- QSqlQuery query;
- query.exec("SELECT id FROM T_STUDENT WHERE class=1");
- if (query.next())
- {
- query.exec("INSERT INTO T_STUDENT (id,name,age) VALUES (3,'小李',13)");
- }
- QSqlDatabase::database().commit();
【转载】QT MySQL数据库操作总结的更多相关文章
- (转载)常用的Mysql数据库操作语句大全
打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...
- Python进行MySQL数据库操作
最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...
- 界面编程之QT的数据库操作20180801
/*******************************************************************************************/ 一.数据库连 ...
- php : mysql数据库操作类演示
设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...
- php MySQL数据库操作类源代码
php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...
- 设计模式 - 单例模式mysql数据库操作类
待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...
- MySQL数据库操作常用命令
MySQL数据库操作常用命令DOS连接数据库1.安装MySQL配置好环境2.运行cmd命令net start mysql3.找到mysql文件根目录输入命令mysql -h localhost -u ...
- Python/MySQL(四、MySQL数据库操作)
Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...
- Java通过JDBC 进行MySQL数据库操作
转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...
随机推荐
- PGI Compiler for OpenACC Output Syntax Highlighting
PGI Compiler for OpenACC Output Syntax Highlighting When use the PGI compiler to compile codes with ...
- JavaScript对象属性访问的两种方式
JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...
- 配置SSH无秘钥登录
[hadoop@hadoop01 ~]$ cd .ssh [hadoop@hadoop01 .ssh]$ ls authorized_keys id_rsa id_rsa.pub known_host ...
- CentOS6.4虚拟机设置固定IP、安装JDK、Tomcat、Redis并部署web项目
一.CentOS设置固定IP 1.直接修改配置文件的方式,原文地址:http://www.cnblogs.com/zhja/p/3964159.html (1)首先获取你的GATEWAY 方便后面在c ...
- VB6之ICMP实现ping功能
代码备忘 'code by lichmama from cnblogs.com Private Type IPAddr ip1 As Byte ip2 As Byte ip3 As Byte ip4 ...
- Unity3D-Shader-实现X光效果
[旧博客转移 - 2016年1月3日 16:40 ] 最近学习了一些Shader效果,打算把学到的知识总结一下,这篇讲一下这种轮廓发光的效果(如下图所示),也有一些地方管这个叫X光 1.原理 ...
- JavaScript中闭包实现的私有属性的getter()和setter()方法
注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- GitHub 入门教程
一.前言 编程进阶的道路是坎坷的,没有任何捷径.这个时期只能是积累.吸收.学习.坚持,做到量的积累,到质的飞跃 古语有云:'书山有路,勤为径'.'不积跬步,无以至千里' 编程是一个动手实践性的学科,多 ...
- poj_3468: A Simple Problem with Integers (树状数组区间更新)
题目是对一个数组,支持两种操作 操作C:对下标从a到b的每个元素,值增加c: 操作Q:对求下标从a到b的元素值之和. 这道题也可以用线段树解,本文不做描述,下面分析如何用树状数组来解决这道题. 先把问 ...
- MyBatis 框架的搭建和配置
MyBatis是支持定制化SQL.存储过程以及高级映射的优秀持久层框架.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集.MyBatis可以对配置和原生Map使用简单的xml或 ...