在Qt中支持对数据库的操作

Qt中数据库的类有:

QT中创建MySQL数据库 qt数据库怎么用_QT中创建MySQL数据库

  • 驱动层:为具体的数据库和SQL接口层之间提供底层的桥梁
  • SQL层:提供对数据库的访问
  • QSqlDateBase类用来创建连接
  • QSqlQuery可以使用SQL语句实现交互
  • 用户接口层:实现将数据库中的数据链接到窗口部件中

想要使用数据库需要在pro文件中添加:QT+=sql

一:连接数据库

常用的数据库驱动:

驱动名称

数据库

QDB2

IBM DB2

QIBASE

Borland InterBase

QMYSQL

MySQL

QOCI

Oracle Call Interface Driver

QODBC

Open Database Connectivity(ODBC、SQL Server)

QPSQL

PostgreSQL

QSQLITE2

SQLite版本2

QSQLITE

SQLite版本3

 QSqlDatabase类:

QSqlDatabase类提供通过连接访问数据库的接口。

常用函数:

addDataBase()

添加驱动

setHostName()

设置连接的主机名

setDataBaseName()

设置连接的数据库的名称

setUserName()

设置使用者名称

setPassword()

设置连接密码

setPort()

设置端口

removeDataBase()

从数据库连接列表中删除数据库连接名称

open()

使用当前连接值打开数据库连接。成功回报;否则返回 

close()

关闭连接

isValid()

是否为有效的驱动        

exec()

在数据库上执行 SQL 语句并返回 QSQLQuery对象

lastError()

返回最后一个错误

driver()

返回用于访问数据库连接的数据库驱动程序

drivers()

返回全部可用的驱动

commit()

提交事务

1.返回可用的数据库驱动:

QSqlDatabase db;
    qDebug()<<db.drivers();

QT中创建MySQL数据库 qt数据库怎么用_QT中创建MySQL数据库_02

 2.创建一个数据库连接

连接 SQL Server的话可以点击该链接,这位大佬总结的比较详细:

 以下为我总结上面大佬的笔记:

  1. 先创建数据库,然后创建相应的表
  2. 点击安全性
  1. 创建一个新的登录名,设置好登录名和密码
  2. 点击用户映射,选择项目中使用的数据库,点击确定
  3. 右键点击新的登录名,然后点击属性,选择数据库角色
  1. 创建一个ODBC
  1. 电脑上搜索ODBC,点击添加,选择SQL Server,然后设置名称和服务器,描述的话可有可无。名称的话可以随便起一个,服务器的话就是你登录SQL Server的账户

 设置完后进入该页面:填入在安全性中创建的登录名和密码

QT中创建MySQL数据库 qt数据库怎么用_数据库_03

之后直确定就可以。

在QT上进行连接:

首先要在pro文件中添加QT+=sql

在main文件中添加以下代码:

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");//设置数据库驱动 这里使用的是SQL Server
    db.setHostName("127.0.0.1");//设置主机名称,本地主机为127.0.0.1
    db.setDatabaseName("1234");//添加数据源,在ODBC中添加的
    db.setUserName("aaa");//登录名称,在SQL Server中添加的登录名
    db.setPassword("123456");//密码,在SQL Server中添加的登录名的密码
    if(!db.open())
    {
        qDebug()<<"打开失败";
    }
    else
    {
        qDebug()<<"打开成功";
    }

在我这里测试成功:

QT中创建MySQL数据库 qt数据库怎么用_QT中创建MySQL数据库_04

 移除数据库连接

  • 首先使用 close()函数关闭连接
  • 再使用removeDataBase()函数进行删除

使用QSqlQuery对数据库进行操作:

QSqlQuery 封装了从再QSqlDataBase 上执行的 SQL 查询中创建、导航和检索数据所涉及的功能。它可用于执行 DML(数据操作语言)语句,例如 、 和 ,以及 DDL(数据定义语言)语句

构造函数:

QT中创建MySQL数据库 qt数据库怎么用_SQL_05

 常用的函数:

exec()

执行SQL语句(执行成功返回true)

prepare()

准备要执行的 SQL 查询查询

addBindValue()

使用位置值绑定时,将值 val 添加到值列表中。addBindValue() 调用的顺序决定了值将在准备好的查询中绑定到哪个占位符。

bindValue()

设置占位符的值

at()

获取当前位置

clear()

清除结果集并释放相关资源

execBatch()

批量执行以前准备好的 SQL 查询

frist()

返回第一条数据

last()

返回最后一条数据

isSelect()

判断是否是查询语句

isValid()

查询的是否是有效数据

lastQuery()

返回当前查询的文本

next()

检索下一条记录

size()

返回结果的大小()行数

value()

返回当前记录中字段的索引值

创建一个QSqlQuery对象并执行一条语句:

 创建一个QSqlQuery对象时,可以指定是哪一个数据库,不指定的话使用默认连接。

 创建一个Person表:

QSqlQuery query;
    query.exec("create table Person("
               "id int identity(1000,1) primary key  not null,"
               "name char(10)not null,"
               "pnumber int not null,"
               "age int not null,"
               "height int not null,)");

QT中创建MySQL数据库 qt数据库怎么用_qt_06

 在表中添加数据:

QSqlQuery query;
    query.exec("insert into Person"
               "value('王',123456,12,150),('赵',456789,15,160)");

QT中创建MySQL数据库 qt数据库怎么用_SQL_07

 遍历整个结果:

if(query.exec("select * from Person"))//如果查询成功
    {
        while(query.next())
        {
            //每一条记录有5个数据使用value(0-4)来访问
            //query.value()的数据类型为QVariant,输出数据时需要强制转换
            qDebug()<<query.value(0).toInt();
            qDebug()<<query.value(1).toString();
            qDebug()<<query.value(2).toInt();
            qDebug()<<query.value(3).toInt();
            qDebug()<<query.value(4).toInt();
        }
    }

QT中创建MySQL数据库 qt数据库怎么用_SQL_08

 定位:

  • frist()第一条数据
  • last()最后一条数据
  • seek(int n)定位到第n条数据    位置从0开始计算

获取第一条数据:

QSqlQuery query;
    query.exec("select * from Person");
    query.first();//获取第一条数据
    qDebug()<<query.value(0).toInt();
    qDebug()<<query.value(1).toString();
    qDebug()<<query.value(2).toInt();
    qDebug()<<query.value(3).toInt();
    qDebug()<<query.value(4).toInt();

QT中创建MySQL数据库 qt数据库怎么用_QT中创建MySQL数据库_09

 获取最后一条数据:

QSqlQuery query;
    query.exec("select * from Person");
    query.last();//获取最后一条数据
    qDebug()<<query.value(0).toInt();
    qDebug()<<query.value(1).toString();
    qDebug()<<query.value(2).toInt();
    qDebug()<<query.value(3).toInt();
    qDebug()<<query.value(4).toInt();

QT中创建MySQL数据库 qt数据库怎么用_SQL_10

使用seek()定位:

QSqlQuery query;
    query.exec("select * from Person");
    query.seek(1);//获取第2条数据
    qDebug()<<query.value(0).toInt();
    qDebug()<<query.value(1).toString();
    qDebug()<<query.value(2).toInt();
    qDebug()<<query.value(3).toInt();
    qDebug()<<query.value(4).toInt();

QT中创建MySQL数据库 qt数据库怎么用_数据库_11

 使用prepare()函数来进行准备执行语句:

  • 名称绑定   占位符格式为     :XXX    一定要加:
  • 使用bindValue()来设置值
  • 位置绑定   使用?来表示
  • 使用addBindValue()来设置值

名称绑定:

query.prepare("insert into Person values(:n1,:n2,:n3,:n4)");
    //添加数据,使用了name,number,age,height占位符
    char a[10]="李";
    int b=1234567;
    int c=16;
    int d=170;

    query.bindValue(":n1",a);
    query.bindValue(":n2",b);
    query.bindValue(":n3",c);
    query.bindValue(":n4",d);
    query.exec();//执行以上语句

QT中创建MySQL数据库 qt数据库怎么用_qt_12

 位置绑定:

query.prepare("insert into Person values(?,?,?,?)");
    char a[10]="张";
    int b=2345678;
    int c=17;
    int d=175;

    query.addBindValue(a);
    query.addBindValue(b);
    query.addBindValue(c);
    query.addBindValue(d);
    query.exec();//执行以上语句

QT中创建MySQL数据库 qt数据库怎么用_qt_13

 批量添加数据:

  • 使用QVaiantList 存储数据
  • 使用addBindValue()添加数据
  • 使用execBatch()执行
query.prepare("insert into Person values(?,?,?,?)");
    QVariantList list1;
    list1<<"谢"<<"宋"<<"邱";
    query.addBindValue(list1);
    QVariantList list2;
    list2<<12121212<<13131313<<14141414;
    query.addBindValue(list2);
    QVariantList list3;
    list3<<18<<19<<20;
    query.addBindValue(list3);
    QVariantList list4;
    list4<<180<<185<<190;
    query.addBindValue(list4);
    query.execBatch();//执行以上语句

QT中创建MySQL数据库 qt数据库怎么用_QT中创建MySQL数据库_14

 在Qt数据库中使用事务:

  • hasFeature()检测是否支持事务
  • transaction()启动一个事务
  • commit()提交
  • rollback()回滚

QT中创建MySQL数据库 qt数据库怎么用_数据库_15