qt使用数据库

Qt SQL模块概述

模板:Qt += sql
头文件:#include <QtSql>

Qt SQL支持的数据库

SQLite:无需服务器,无需任何配置.所有数据表,索引,...全部存储在一个文件
SQLite ExpertSQLite数据库可视化管理工具
QSqlRelationalTableModel

Qt SQL模块的主要类

Qt SQL模块包含的主要类的功能

类名描述
QSqlDatabase建立与数据库的连接
QSqlDriver访问具体的SQL数据库的底层抽象类
QSqlDriverCreator为某具体的数据库驱动提供SQL驱动的模板类
QSqlDriverCreatorBase
QSqlDriverPlugin用于定制QSqlDriver插件的抽象基类
QSqlError
QSqlField操作数据表或视图的字段的类
QSqlIndex操作数据库的索引的类
QSqlQuery执行各种SQL语句的类
QSqlRecord封装了数据记录操作的类
QSqlRelation存储SQL外键信息
QSqlRelationDelegate
QSqlRelationTableModel
QSqlResult
QSqlTableModel编辑一个单一数据表的数据模型类
QDataWidgetMapper界面组件与字段间映射

QSqlDatabase用于建立与数据库的连接
一般先加载数据库驱动
设置数据库登录参数[主机地址,用户名,密码,...]
如单机数据库,只需设置数据库文件

数据库的操作一般需将数据库内容在界面上显示和编辑
Qt采用Model/View结构进行显示
QTableView常用的数据库内容显示视图组件
用于数据库操作的数据模型类有QSqlQueryModel,QSqlTableModel,QSqlRelationalTableModel
有:QAbstractTableModel-->QSqlQueryModel-->QSqlTableModel-->QSqlRelationalTableModell

QSqlQueryModel通过设置SELECT查询获取数据库的内容
QSqlQueryModel的数据是只读的

QSqlTableModel直接设置一个数据表的名称,可获取数据表的全部记录,结果是可编辑的
设置为界面上QTableView组件的数据模型后就可显示和编辑数据

QSqlRelationalTableModel编辑一个数据表
且可将代码字段通过关系与代码表关联
将代码字段的编辑转换为直观的内容选择编辑

QSqlTableModel的使用

实例功能

主窗口设计

QSqlDataBase// 加载数据库驱动&建立与数据库间的连接
QSqlTableModel// 指定某一数据表,作为数据表的数据模型
QItemSelectionModel// 选择项模型
QDataWidgetMapper// 实现界面组件与tabModel字段间的映射
定义了两个槽函数
- 如on_currentChanged()
检查数据表内容是否有修改
- 如on_currentRowChanged()
QTableView

void setSelectionBehavior(...)
void setSelectionMode(...)
void setAlternatingRowColors(...)

打开数据表

QSqlDataBase

void addDatabase(...)
void setDatabaseName(...)
bool open()
void setHostName(...)
void setUserName(...)
void setPassword(...)

QSqlTableModel

void setTable(...)
void setSort(...)
? fieldIndex(...)
void setEditStrategy(...)
void select()
void setHeaderData(...)

如:QItemSelectionModel,QModelIndex,QTableVIew

void setModel(...)
void setSelectionModel(...)
void setColumnHidden(...)
void setItemDelegateForColumn(...)

QDataWidgetMapper

new QDataWidgetMapper()
void setModel(...)
void setSubmitPolicy(...)
void addMapping(...)
void toFirst()

QSqlTableModel类的主要函数

函数描述
QSqlDatabase database()返回其数据库连接
void setTable(QString&)设置数据表名称
QString tableName()
void setFilter(QString&)设置记录过滤条件
void setSort(…)设置排序字段,排序规则
void sort(…)按列和排序规则立即排序
void setEditStrategy(…)设置编辑策略
bool setHeaderData(…)设置表头
bool isDirty()若有未更新到数据库的修改,返回true
int fieldIndex(…)根据字段名称返回在模型中的字段序号
QSqlIndex primaryKey()返回数据表的主索引
int rowCount()返回记录条数
bool select()查询数据表的数据,使用排序和过滤规则
bool selectRow(…)刷新获取指定行记录
void clear()清理数据模型,释放所有获取的数据
QSqlRecord record()返回一条空记录
QSqlRecord record(…)返回指定行记录
bool setRecord(…)更新一条记录数据到数据模型.按字段匹配
bool insertRecord(…)在行号row前插入一条记录
bool insertRows(…)在指定行号前插入若干空行
bool removeRows(…)从指定行号开始,删除若干行,若编辑策略为OnManualSubmit,需调submitAll()才从数据表删除
void revertRow(…)取消指定行号记录修改
void revert()编辑策略为OnRowChange/OnFieldChange时,取消当前行修改
void revertAll()取消所有未提交修改
bool submit()提交当前行修改到数据库,对OnManualSubmit编辑策略无效
bool submitAll()提交所有未更新的修改到数据库.若成功,返回true.失败,返回false.

openTable主要功能
- 数据模型创建与属性设置
创建QSqlTableModel类型私有变量
在创建时指定数据库连接
setTable()函数指定数据表
void QSqlTableModel::setSort(...),QSqlTableModel::setEditStrategy(...)用于设置编辑策略
1.QSqlTableModel::OnFieldChange
字段值变化时立即更新到数据库
2.QSqlTableModel::OnRowChange
当前行变换时更新到数据库
3.QSqlTableModel::OnManualSubmit
所有修改暂时缓存
手动调submitAll()保存所有修改
revertAll()取消所有未保存修改

tabModel设置这些属性后,调select打开数据表
QSqlTableModel::lastError()获取上一错误信息文本说明

- 表头设置
QSqlTableModel::setHeaderData(...)
- 选择模型及其信号的作用
QItemSelectionModel,QDataWidgetMappervoid setCurrentIndex(...)

QSqlRecord支持bool isFull(...)
QSqlTableModel支持QSqlRecord record(...)
QPixmap

void loadFromData(...)
void setPixmap(...)

- 表示记录的类QSqlRecord
QSqlRecord类记录了数据表的字段信息和一条记录的数据内容
QSqlTableModel有两种参数的函数record()可返回一条记录
1.QSqlRecord QSqlTableModel::record()
返回空记录
2.QSqlRecord QSqlTableModel::record(...)
返回指定行的记录,包括记录的字段定义和数据
QSqlRecord类的主要函数

原型描述
void clear()清除记录的所有字段定义和数据
void clearValuess()清除所有字段的数据,将字段数据内容设置为null
bool contains(QString&)判断记录是否按指定名字字段
bool isEmpty()判断记录是否无字段
int count()返回记录字段个数
QString fieldName(…)返回指定序号字段的名称
int indexOf(QString&)返回字段名称为指定值的字段序号
QSqlField field(QString&)返回字段名称为指定值的字段对象
QVariant value(QString&)返回字段名称为指定值的字段的值
void setValue(QString&, QVariant&)设置字段名为指定值的字段值
bool isNull(const QString&)判断字段名称为指定值字段数据是否为null
void setNull(const QString&)设置名称为指定值字段值为null

- 表示字段的类QSqlField
QSqlRecordfield()函数返回某个字段,返回数据类型是QSqlField
QSqlField封装了字段定义信息和数据
字段的定义一般在设计数据表时就固定了,不用在QSqlRecord里修改
QSqlRecord用于字段数据读写函数见下标

函数描述
void clear()清除字段数据,设置为NULL.如字段为只读,不清除.
bool isNull()判断字段值是否为NULL
bool setReadOnly(bool)设置一个字段为只读,只读字段不可用setValue()设置值,不可用clear()清除值
QVariant value()返回字段的值
void setValue(QVariant&)设置字段的值

- tableView的设置
- 数据映射
QDataWidgetMapper用于建立界面组件与数据模型间的映射
- 获取数据表的所有字段名称
QSqlRecord支持QString fieldName(...)

添加,插入与删除记录

QSqlTableModel

void insertRow(...)
QModelIndex index(...)
void setData(...)
void removeRow(...)

QItemSelection

void clearSelection()
void setCurrentIndex(...)
QModelIndex currentIndex()

QTableView支持QModelIndex currentIndex()

QModelIndex

int row()
int col()

保存与取消修改

QSqlTableModel

void submitAll()
void revertAll()

设置和清除照片

QItemSelection支持QModelIndex currentIndex()
QModelIndex

int row()
int col()

QSqlTableModel

QSqlRecord record(...)
void setRecord(...)

QSqlRecord

void setValue(...)
void setNull()

QPixmap支持void Load(...)

数据记录的遍历

QSqlTableModel

int rowCount()
QSqlRecord record(...)
void setRecord(...)
bool submitAll()

QSqlRecord

QVariable value(...)
void setValue(...)

记录排序

QSqlTableModel

void setSort(...)
void select()

记录过滤

QSqlTableModel支持void setFilter(...)// 设置记录过滤条件

QSqlQueryModel的使用

QSqlQueryModel功能概述

QSqlQueryModel类的主要函数

函数描述
void clear()清除数据模型,释放所有获得数据
QSqlError lastError()返回上次错误,可获取错误类型和文本信息
QSqlQuery query()返回当前关联的QSqlQuery对象
void setQuery(QSqlQuery&)设置一个QSqlQuery对象,获取数据
void setQuery(QString&)设置一个SELECT语句创建查询,获取数据
QSqlRecord record()返回一个空记录,含字段信息
QSqlRecord record(int)返回指定行的记录
int rowCount()返回查询到的记录条数
int columuCount()返回查询的字段个数
void setHeaderData(int, Qt::Orientation, QVariant&)设置表头数据,一般用于设置字段的表头标题

使用QSqlQueryModel实现数据查询

1.实例功能
如:QSqlDatabase,QSqlQueryModel,QItemSelectionModel,QDataWidgetMapper,QModelIndex
2.打开数据库
QSqlQueryModel

void setQuery(...)
? lastError()
void setHeaderData(...)

QItemSelectionModel支持new QItemSelectionModel(...)

QTableView

void setModel(...)
void setSelectionMode(...)

QDataWidgetMapper

void setCurrentModelIndex(...)
void setSubmitPolicy(...)
void setModel(...)
void addMapping(...)
void toFirst()

QSqlQuery

void prepare(...)
void bindValue(...)
void exec()
void first()
QVariant value(...)
QVariant value(...)

QByteArray,QPixmap支持void loadFromData(...)

- 记录移动
QDataWidgetMapper

QSqlQuery使用

QSqlQuery基本用法

QSqlQuery能执行任意SQL语句的类,
SELECT,INSERT,UPDATE,DELETE
QSqlQuery类的主要函数

函数描述
bool prepare(QString&)
void bindValue(QString&,QVariant&)
void exec()
void exec(QString&)
bool isActive()
bool isSelect()
QVariant value(QString&)
bool isNull(QString&)
int size()
int numRowsAffected()
bool first()
bool previous()
bool next()
bool last()
bool seek(…)
int at()

QSqlQueryModel和QSqlQuery联合使用

1.数据表显示
QSqlQueryModel可查询数据并作为数据模型,实现数据的显示
QSqlQuery可执行UPDATE,INSERT,DELETESQL语句实现数据的编辑修改
QSqlDatabase,QSqlQueryModel

void setQuery(...)
? lastError()
void setHeaderData(...)

QItemSelectionModel支持new QItemSelectionModel(...)
QTableView

void setModel(...)
void setSelectionModel(...)

2.编辑记录对话框
QSqlRecord
3.编辑记录
4.插入记录
5.删除记录
6.记录遍历

QSqlRelationalTableModel的使用

关系型数据表和实例功能

所谓关系数据表,指将主表里某个字段存储为代码型字段,而代码的具体意义在另外一个数据表里

关系型数据模型功能实现

- 主窗口类定义
QSqlDataBase,QSqlRelationalTableModel,QItemSelectionModel
- 打开数据表
QSqlRelationalTableModel

new QSqlRelationalTableModel(...)
void setTable(...)
void setEditStrategy(...)
void setSort(...)
void setHeaderData(...)
void setRelation(int column, const QSqlRelation&)// 
void select()

QItemSelectionModel,QTableView

void setModel(...)
void setSelectionMode(...)
void setItemDelegate(...)

QItemSelectionModel
- 实际字段列表
QSqlTableModel支持QSqlRecord record()
- 其他功能的实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Qt使用数据库实现登录功能可以通过以下步骤实现: 1. 首先,需要在Qt中连接到数据库。可以使用Qt提供的QSqlDatabase来连接各种型的数据库,例如SQLite、MySQL等。可以在代码中使用以下代码来连接到数据库: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 这里连接的是SQLite数据库,可以根据需要修改 db.setDatabaseName("database.db"); // 这里是数据库文件的路径和名称,可以根据需要修改 if (!db.open()) { qDebug() << "无法打开数据库文件!"; return; } ``` 这段代码创建了一个SQLite数据库连接,并打开了名为"database.db"的数据库文件。你可以根据需要修改数据库型和文件名。 2. 接下来,需要在数据库中创建用户表。可以使用以下命令将用户表创建为名为"users"的表: ``` QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)"); if (query.lastError().type() != QSqlError::NoError) { qDebug() << "创建用户表失败:" << query.lastError().text(); return; } ``` 这段代码使用QSqlQuery来执行SQL语句,在数据库中创建了一个名为"users"的表,该表包含用户名和密码字段。 3. 在登录界面中,用户输入用户名和密码后,可以使用以下代码来验证用户的用户名和密码是否正确: ``` QString username = ui->usernameLineEdit->text(); // 获取用户名输入框的文本 QString password = ui->passwordLineEdit->text(); // 获取密码输入框的文本 QSqlQuery query; query.prepare("SELECT username FROM users WHERE username = ? AND password = ?"); query.addBindValue(username); query.addBindValue(password); query.exec(); if (query.next()) { qDebug() << "登录成功!"; } else { qDebug() << "用户名或密码错误!"; } ``` 这段代码执行了一个查询语句,从"users"表中选择包含指定用户名和密码的记录。如果查询结果非空,说明用户名和密码正确,登录成功;否则,用户名或密码错误,登录失败。 以上就是使用Qt实现登录功能时使用数据库的一般步骤。当然,具体实现还取决于项目需求和数据库型,可以根据需求做相应的修改和补充。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值