IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Qt连接MySQL数据库实例 -> 正文阅读

[大数据]Qt连接MySQL数据库实例

目录

1 测试平台

2 功能设计

3 代码实现


1 测试平台

采用qt4和mysql实现,其中mysql使用wamp自带,且开启服务。

2 功能设计

主要有8个功能:

(1)查看驱动,查看当前支持的数据库类型;

(2)设置连接参数,设置主机,用户,密码等;

(3)数据库连接和列表显示:展示当前数据库清单;

(4)打开数据库:打开所选的数据库并显示其中的表

(5)创建表:采用sql创建新表

(6)打开表:打开已有的表

(7)插入记录:

(8)查询表的字段个数

3 代码实现

首先新建widget工程:

开始从头实现各项功能:首先是查看驱动:

// 获取驱动
void Widget::on_pushButton_clicked()
{
    QStringList list = QSqlDatabase::drivers();
    Qstrlistmodel->setStringList(list);
    ui->tableView->setModel(Qstrlistmodel);
}

查看实现效果:

(2)实现数据库参数设置:


// 设置连接参数
void Widget::on_pushButton_2_clicked()
{
    // 获取字符串
    bool ok;
    QString str = QInputDialog::getText(this,"输入对话框", "输入连接信息:",
        QLineEdit::Normal,"QMYSQL;localhost;root;123456", &ok);
    if(!ok)
        return;
    // 切割为字符串列表
    QStringList list = str.split(";");
    if(list.count()!=4)
        return;
    driverName = list.at(0);
    hostName = list.at(1);
    userName = list.at(2);
    pwdCode = list.at(3);
    // 视图更新
    Qstrlistmodel->setStringList(list);
    ui->tableView->setModel(Qstrlistmodel);
}

?实现效果就是显示参数:

这一步只是指定参数,还没有正式连接。

(3)连接数据库服务,显示当前数据库清单:


// 连接并显示数据库
void Widget::on_pushButton_3_clicked()
{
    // 连接数据库
    QSqlDatabase db;
    if(QSqlDatabase::contains("qt_sql_default_connection"))
        db = QSqlDatabase::database("qt_sql_default_connection");
    else
        db = QSqlDatabase::addDatabase(driverName);

    db.setHostName(hostName);
    db.setUserName(userName);
    db.setPassword(pwdCode);
    if(!db.open())
    {
        QMessageBox::information(this,"错误",db.lastError().text());
        return;
    }

    QSqlQuery query(db);
    query.exec("show databases");
    dblist.clear();
    while(query.next())
        dblist<<query.value(0).toString();
    // 视图更新
    Qstrlistmodel->setStringList(dblist);
    ui->tableView->setModel(Qstrlistmodel);

}

显示效果如下:

相当于实现了show databases;

(4)打开数据库,显示其中的表


// 打开数据库显示表清单
void Widget::on_pushButton_4_clicked()
{
    // 获取字符串
    bool ok;
    QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择数据库:",
        dblist,0,false, &ok);
    if(!ok)
        return;
    curDb = str;

    QSqlDatabase db;
    if(QSqlDatabase::contains("qt_sql_default_connection"))
        db = QSqlDatabase::database("qt_sql_default_connection");
    else
        db = QSqlDatabase::addDatabase(driverName);
    db.setHostName(hostName);
    db.setUserName(userName);
    db.setPassword(pwdCode);
    if(!db.open())
    {
        QMessageBox::information(this,"错误",db.lastError().text());
        return;
    }
    // 查询所有表清单
    QSqlQuery query(db);
    query.exec(QString("use %1").arg(str));
    query.exec("show tables");
    tblist.clear();
    while(query.next())
        tblist<<query.value(0).toString();
    // 视图更新
    Qstrlistmodel->setStringList(tblist);
    ui->tableView->setModel(Qstrlistmodel);
}

?实现效果如下:

?显示了当前数据库下的所有表格。

(5)查看表格的字段数


void Widget::on_pushButton_8_clicked()
{
    // 获取字符串
    bool ok;
    QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择表:",
        tblist,0,false, &ok);
    if(!ok)
        return;
    curTb = str;

    QSqlDatabase db;
    if(QSqlDatabase::contains("qt_sql_default_connection"))
        db = QSqlDatabase::database("qt_sql_default_connection");
    else
        db = QSqlDatabase::addDatabase(driverName);
    db.setHostName(hostName);
    db.setUserName(userName);
    db.setPassword(pwdCode);
    if(!db.open())
    {
        QMessageBox::information(this,"错误",db.lastError().text());
        return;
    }

    QSqlQuery query(db);
    query.exec(QString("use %1").arg(curDb));

    QString sql = QString("SELECT COUNT( * ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '%1' AND table_name = '%2'").arg(curDb,curTb);
    query.exec(sql);
    query.first();
    int colCount = query.value(0).toInt();

    QStringList list;
    list.clear();
    list<<QString::number(colCount);

    //视图更新
    Qstrlistmodel->setStringList(list);
    ui->tableView->setModel(Qstrlistmodel);

}

?这里还是使用query来实现,并用模型视图显示。

(7)查看表内容

// 打开表内容
void Widget::on_pushButton_6_clicked()
{
    // 获取字符串
    bool ok;
    QString str = QInputDialog::getItem(this,tr("QInputDialog::getItem()"), "选择表:",
        tblist,0,false, &ok);
    if(!ok)
        return;
    curTb = str;

    QSqlDatabase db;
    if(QSqlDatabase::contains("qt_sql_default_connection"))
        db = QSqlDatabase::database("qt_sql_default_connection");
    else
        db = QSqlDatabase::addDatabase(driverName);
    db.setHostName(hostName);
    db.setUserName(userName);
    db.setPassword(pwdCode);
    if(!db.open())
    {
        QMessageBox::information(this,"错误",db.lastError().text());
        return;
    }
    // 查询模型
    querymodel = new QSqlQueryModel(this);
    QString sql;
    sql = QString("USE %1").arg(curDb);
    querymodel->setQuery(sql);
    sql = QString("SELECT * FROM %1").arg(curTb);
    querymodel->setQuery(sql);
    ui->tableView->setModel(querymodel);


}

?这里由于表是二维数据,用sqtringlistmodel明显不够使了,改成用querymodel来实现mvc。

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:46:25  更:2022-05-09 12:50:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:32:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码