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

#include <QtSql>

QT += sql
QSqlDatabase类实现了数据库连接的操作
QSqlQuery类执行SQL语句
QSqlRecord类封装数据库所有记录

QSqlDatabase类

  1. QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
  2. db.setHostName("localhost");    //数据库主机名
  3. db.setDatabaseName("scott");    //数据库名
  4. db.setUserName("stott");        //数据库用户名
  5. db.setPassword("tiger");        //数据库密码
  6. db.open();          //打开数据库连接
  7. db.close();         //释放数据库连接

建立数据库文件

  1. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  2. db.setDatabaseName("database.db");
  3. if (!db.open())
  4. {
  5. qDebug("数据库不能打开");
  6. }
  7. return false;
  1. 建立数据库文件后创建表并插入两条数据
  1. QSqlQuery query;
  2. query.exec("create table student(id INTEGER PRIMARY KEY autoincrement,
  3. name nvarchar(20), age int)"); //id自动增加
  4. query.exec("insert into student values(1,'小明', 14)");
  5. query.exec("insert into student values(2,'小王',15)");

QSqlQuery类

插入值到数据库操作

一、直接用SQL语句插入(参照上面)

二、利用预处理方式插入(ORACLE语法和ODBC语法)

适合插入多条记录,或者避免将值转换成字符串(即正确地转义),调用prepare()函数指定一个包含占位符的query,然后绑定要插入的值

ORACLE语法

  1. QSqlQuery query;
  2. query.prepare("INSERT INTO T_STUDENT (name, age) VALUES (:name, :age)"); //准备执行SQL查询
  3. query.bindValue(":name", "小王");   //在绑定要插入的值
  4. query.bindValue(":age", 11);
  5. query.exec();

ODBC语法

  1. QSqlQuery query;
  2. query.prepare("INSERT INTO T_STUDENT (name,age) VALUES (?,?)"); //准备执行SQL查询
  3. query.addBindValue("小王");   //在绑定要插入的值
  4. query.bindValue(11);
  5. query.exec();

三、批量插入到数据库中

  1. QSqlQuery query;
  2. query.prepare(“insert into student values (?, ?)”);
  3. QVariantList names;
  4. names << "小王" << "小明" << "小张" << "小新"; // 如果要提交空串,用QVariant(QVariant::String)代替名字
  5. query.addBindValue(names);
  6. QVariantList ages;
  7. ages << 11 << 13 << 12 << 11;
  8. query.addBindValue(ages);
  9. if (!q.execBatch()) //进行批处理,如果出错就输出错误
  10. qDebug() << q.lastError();

查询数据库操作

  1. QSqlQuery query;
  2. query.exec("SELECT * FROM t_STUDENT"); // 查询的结果可能不止一条记录,所以我们称之为结果集
  3. while (query.next())
  4. {
  5. QString name = query.value(0).toString(); //取第i条记录第1个字段(从0开始计数)的结果
  6. int age = query.value(0).toInt(); //取第i条记录第2个字段的结果
  7. // ... 处理name,age变量数据
  8. }

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类函数

  1. if (QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){ ... } //

插入一条记录,然后提交事务

    1. QSqlDatabase::database().transaction();
    2. QSqlQuery query;
    3. query.exec("SELECT id FROM T_STUDENT WHERE class=1");
    4. if (query.next())
    5. {
    6. query.exec("INSERT INTO T_STUDENT (id,name,age) VALUES (3,'小李',13)");
    7. }
    8. QSqlDatabase::database().commit();

【转载】QT MySQL数据库操作总结的更多相关文章

  1. (转载)常用的Mysql数据库操作语句大全

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

  2. Python进行MySQL数据库操作

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

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

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

  4. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  5. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  6. 设计模式 - 单例模式mysql数据库操作类

    待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...

  7. MySQL数据库操作常用命令

    MySQL数据库操作常用命令DOS连接数据库1.安装MySQL配置好环境2.运行cmd命令net start mysql3.找到mysql文件根目录输入命令mysql -h localhost -u ...

  8. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  9. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

随机推荐

  1. JavaScript中的栈及通过栈操作的实例

    <script> /*栈操作*/ function Stack() { this.dataStore = []; this.top = 0; this.push = push; this. ...

  2. Sublime text3插件安装方法

    一.安装sublime text3插件的方法: 1.Ctrl+~键,调出console,将下面代码复制到底部命令行,回车: import urllib.request,os; pf = 'Packag ...

  3. easyui框架--基础篇(一)-->数据表格datagrid(php与mysql交互)

      前  言  php  easyui框架--本篇学习主要是 easyui中的datagrid(数据表格)框架. 本篇学习主要通过讲解一段代码加GIF图片学习datagrid(数据表格)中的一些常用属 ...

  4. 浙江省新高中信息技术教材,将围绕Python进行并增加编程相关知识点

    2017年初消息: 浙江省信息技术新教材,即将在2017级(2017年9月入学)高中新生中开始使用. 据了解,与目前的选考(可以理解为高考科目)要求的信息技术教材由3本<信息技术基础>.& ...

  5. Maven搭建Hadoop开发环境

    1.安装maven(用于管理仓库,jar包的管理) 1.解压maven安装包 2.把maven添加到环境变量/etc/profile 3.添加maven目录下的conf/setting.xml文件到- ...

  6. 奇舞js笔记——第0课——如何写好原生js代码

    摘要 1.好的代码职责要清晰,javscript不要用来操作样式: 2.API要设计的合理:通用性,适度的抽象(数据抽象,过程抽象),可扩展性: 3.效率问题:用好的.合适的算法(前端程序员要把自己当 ...

  7. vue.js 生命周期

    boforeCreate   创建之前 created            创建之后 boforeMount    实例化之前 mounted          实例化之后 话不多说,直接上代码 & ...

  8. RunLoop的简单理解笔记

    一句话解释RunLoop:运行任务的循环. 为什么要有RunLoop:解决交互式UI设计中的一个问题,如何快速响应用户输入,如何快速将程序运行结果输出到屏幕? 基本原理:1 将任务分解的足够细 2 每 ...

  9. java 分页模型的模板

    分页sql select top 每页要显示的记录数 * from 表名 where 主键 not in (select top (每页显示的记录数*(当前页-1)) 主键 from 表名 ) sel ...

  10. ASP.NET Core MVC 过滤器介绍

    过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...