qt的mysql数据库_【转载】QT MySQL数据库操作总结

转载自http://blog.chinaunix.net/uid-28194872-id-3631462.html

#include

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 <

query.addBindValue(names);

QVariantList ages;

ages <

query.addBindValue(ages);

if (!q.execBatch()) //进行批处理,如果出错就输出错误

qDebug() <

查询数据库操作

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();

&lpar;转载&rpar;常用的Mysql数据库操作语句大全

打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...

Python进行MySQL数据库操作

最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

界面编程之QT的数据库操作20180801

/*******************************************************************************************/ 一.数据库连 ...

php &colon; 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&sol;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 ...

随机推荐

linux安装hadoop 1&period;2&period;1

我的服务器里面会装很多东西,所以我在跟目录下面建立了个doc文档文件夹 1.创建存放软件的doc文件夹 mkdir doc 2.进去doc文件夹进行下载hadoop-1.2.1资源包或者到我的百度云下 ...

3des加解密算法

编号:1003时间:2016年4月1日09:51:11功能:openssl_3des加解密算法http://blog.csdn.net/alonesword/article/details/17385 ...

C&num; 扩展方法 总结

扩展方法是静态方法,它是类的一部分,但实际上没有放在类的源代码中. 设计一个Money类 public class Money { private decimal amount; public dec ...

JS中数组的方法

1. join() Array.join() 是 String.split() 的逆向操作 var arr = [1, 2, 3] arr.join()// "1,2,3" arr ...

转:LRU算法

LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了.由于无法预测各页面将来的使用情况,只能利用“最近 ...

ansible基础-ansible角色的使用

ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

java结合testng,利用yaml做数据源的数据驱动实例

testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...

zjoi&lbrack;ZJOI2018&rsqb;胖

题解: 因为n,m很大 所以复杂度应该是和m相关的 考虑到每个点的影响区间是连续的 就很简单了 区间查询最小值线段树维护(st表也可以) 然后注意一下不要重复算一个就可以了 max函数用templat ...

springcloud使用Zuul构建微服务网关入门

为什么要使用微服务网关 不同的微服务一般会经过不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求. 如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值