Qt中的QSqlDatabase、QSqlQueryModel、QSqlRecord、QSqlTableModel等类为我们提供了快速开发数据库的方式,支持多种数据库连接,例如oracle,db2,Mysql,Sqlserver等数据库,QSqlDatabase类实现了数据库连接的操作;QSqlQuery类用来执行SQL语句,对数据库记录的Select、Insert、Update、Delete操作;QSqlRecord类 封装数据库所有记录;QSqlTableModel 继承QSqlQueryModel类 ,该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序等功能。

那么如何连接Mysql数据库呢?我们一般使用静态方法addDatabas类实现数据库的连接:直接上代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setPort(3306);

db.setHostName("139.129.21.226");

db.setDatabaseName("table");

db.setUserName("root");

db.setPassword("123abc");

if(db.open())

{

qDebug()<

qDebug()<

QSqlQuery query("show tables from admin");//admin数据库里的所有表

}else{

qDebug()<

}

一般情况下,我们安装Qt5以上版本,都自带了数据库驱动,只需要在程序里指明即可,有些情况下,会在连接时报缺该驱动,那么就需要要重写编译下对应的数据库驱动了,详细编译过程,请查相关资料,这里只讲操作,不再赘述。下面我们看下数据库的操作:

1、QSqlQuery 创建表:

QSqlQuery query;

if(!query.exec("CREATE TABLE admin(id INTEGER PRIMARY KEY, name VARCHAR,passwdVARCHAR,create_time DATETIME,root VARCHAR, authority VARCHAR)"))

{

return query.lastError();

}

2、QSqlQuery 数据插入:

QSqlQuery query;

query.exec("SELECT * FROM admin "); // 查询的结果可能不止一条记录,所以我们称之为结果集

while (query.next())

{

QString id = query.value(0).toInt (); //取第i条记录第1个字段(从0开始计数)的结果

int name = query.value(0).toString (); //取第i条记录第2个字段的结果

}

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(); //获取每条记录中属性(即列)的个数

3、QSqlQuery 事务操作:

操作函数:transaction(),commit()提交,rollback()回滚

操作事务前,先判断该数据库是否支持事务操作。hasFeature是QSQLDriver类函数

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

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

QSqlDatabase::database().transaction();

QSqlQuery query;

query.exec("SELECT id FROM admin WHERE id=12");

if (query.next())

{

query.exec("INSERT INTO T_STUDENT (id,name,root) VALUES (3,'lixiao',1)");

}

QSqlDatabase::database().commit();

4、综合示例:

ui->tableWidget = new QTableWidget(6,6);

//设置表格行标题的对齐方式

ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);

ui->vlaout->addWidget(ui->tableWidget);

//设置行表题

QStringList rowLabels;

rowLabels << "Line1" << "Line2" << "Line3" << "Line4"<< "Line5"<< "Line6";

ui->tableWidget->setVerticalHeaderLabels(rowLabels);

//设置每一行的高度

for(int i = 0; i < 6; i++)

ui->tableWidget->setRowHeight(i, 22);

//自动调整最后一列的宽度使它和表格的右边界对齐

ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

//设置表格的选择方式

ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);

//设置编辑方式

ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked);

//设置表格的内容

for (int row = 0; row < 6; ++row)

{

QTableWidgetItem *item0, *item1, *item2, *item3, *item4 , *item5;

item0 = new QTableWidgetItem;

item1 = new QTableWidgetItem;

item2 = new QTableWidgetItem;

item3 = new QTableWidgetItem;

item4 = new QTableWidgetItem;

item5 = new QTableWidgetItem;

QSqlQuery query1("select * from admin");//查询表的内容

while (query1.next()) {

QString id = query1.value(0).toString();//表第1个字段的内容

QString name = query1.value(1).toString();//表第2个字段的内容

QString passwd = query1.value(2).toString();//表第3个字段的内容

QString create_time = query1.value(3).toString();//表第4个字段的内容

QString root = query1.value(4).toString();//表第5个字段的内容

QString authority = query1.value(5).toString();//表第6个字段的内容

qDebug()<

qDebug()<

qDebug()<

qDebug()<

qDebug()<

qDebug()<

item0->setText(id);

ui->tableWidget->setItem(row, 0, item0);

item1->setText(name);

ui->tableWidget->setItem(row, 1, item1);

item2->setText(passwd);

ui->tableWidget->setItem(row, 2, item2);

item3->setText(create_time);

ui->tableWidget->setItem(row, 3, item3);

item4->setText(root);

ui->tableWidget->setItem(row, 4, item4);

item5->setText(authority);

ui->tableWidget->setItem(row, 5, item5);

}

} ui->tableWidget->show();如图1所示:

图1   后台管理测试数据库表操作实例

qt mysql怎么选表_Qt的Mysql数据库表操作(1)相关推荐

  1. oracle删除表的一个字段的数据库,学会Oracle数据库删除表字段和Oracle数据库表增加字段方法...

    Oracle数据库添加字段的语法:alter table tablename add (column datatype [default  value][null/not null],-.); Ora ...

  2. mysql数据库表类型设置_mysql数据库表的类型介绍

    目录 前言 之前我们讲了下载安装数据库,还有如何卸载(虽然直接重装系统就好) 那么现在让我们来讲讲 """ 1.数据库与表的剩余操作 编码配置.引擎介绍 2.数据库字段的 ...

  3. mysql 表大小_MySQL查看数据库表容量大小的方法示例

    本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用. 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table ...

  4. mysql数据存储到指定位置_Mysql数据库表分区存储到指定磁盘路径

    . 前提: mysql5.6.6以上的版本以上的版本才支持单表指定目录,且目录权限是MySQL:mysql.  在mysql中数据文件存放于在my.cnf中datadir指定的路径,使用的表引擎不同产 ...

  5. mysql 吧库下的表名都加_mysql数据库表名大小写问题

    mysql数据库表名大小写问题 mysql数据库linux版本表名.字段名默认大小写敏感,即区分大小写. 查看mysql有关大小写参数: lower_case_file_system是一个只读参数,无 ...

  6. mysql表前缀_关于数据库表前缀的认识

    mysql数据库表前缀,这个是我们区分其它表的一个方式,当我们同一个数据库中含有多个系统的的时候,表前缀就却分的唯一标识.我们使用php开源程序安装建站的时候,一般数据库表前缀都是默认设置好的,如:w ...

  7. mysql 表名 空格_Mysql数据库表名空格处理

    这几天在用同事建的数据库,因为设计文档中的部分表名有空格,导致建表的时候也有,从网上找了好久才找改名来正确处理的办法. 使用 ` (即数字键1左边那个键) mysql> alter table ...

  8. mysql查询主键sql语句_MySQL数据库-表操作-SQL语句(一)

    1. 数据库操作与存储引擎 1.1   数据库和数据库对象 数据库对象:存储,管理和使用数据的不同结构形式,如:表.视图.存储过程.函数.触发器.事件等. 数据库:存储数据库对象的容器. 数据库分两种 ...

  9. 增大mysql修改表空间_扩充数据库表空间

    ALTER TABLESPACE ADD DATAFILE , [REUSE] NEXT MAXSIZE <>中是你要填的内容,有|是选其一. 如:增加文件是d:\dbfs\mydatab ...

最新文章

  1. linux7怎样搭建zabbix,Centos7.0 搭建Zabbix环境
  2. python详细基础教程-Python基础教程,Python入门教程(非常详细)
  3. python Gevent – 高性能的Python并发框架
  4. [android] 隐式意图的配置
  5. AWS Elemental推出新一代基于云的直播视频服务
  6. 算法9---二叉树的遍历不用栈和递归
  7. 元素在父元素内垂直居中的思路
  8. [iOS] 建立与使用Framework
  9. 关于OATUH中的AUTHRAZITON CODE和TOKEN的关系,实际上就是这么回事
  10. ros开发增加clion常用模板及初始化配置(一)
  11. 硅谷Spring项目组专家教你利用Spring Cloud构建微服务
  12. Windows10视频文件服务器启动失败,Win10安全中心服务启动失败的解决方法
  13. 基于HFSS阵列天线设计
  14. iso镜像添加软件包_iso镜像文件怎么安装 安装镜像文件的方法【图文】
  15. 将数组分成两部分使得两部分的和的差最小
  16. 微信公众号里面使用定位
  17. python tokenize()_Python tokenize-rt包_程序模块 - PyPI - Python中文网
  18. IDEA Alt+Insert键打开的是命令行
  19. HAUTOJ1062
  20. 2021年如何通过网络赚钱

热门文章

  1. 苹果真要开发无线充电外壳 已要求联发科提供芯片样品
  2. [javaSE] 标识符大小写
  3. yum与rpm的使用
  4. ie6 span 换行IE6中float:right换行问题的替代解决方案
  5. 函数集成redis与Spring集成
  6. iPhone开发中的一些小技巧
  7. 无限驾驶汉化后黑屏问题
  8. python urllib2_Python爬虫 urllib2的使用方法详解
  9. 【PP操作手册】创建和下达返修生产订单
  10. 【转】根据起止日期+时间取数