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。

 

 

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Intimes

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

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

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

打赏作者

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

抵扣说明:

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

余额充值