Qt连接MySQL数据库实例

目录

1 测试平台

2 功能设计

3 代码实现


1 测试平台

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

2 功能设计

Qt连接MySQL数据库实例_第1张图片

主要有8个功能:

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

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

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

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

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

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

(7)插入记录:

(8)查询表的字段个数

3 代码实现

首先新建widget工程:

Qt连接MySQL数据库实例_第2张图片

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

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

查看实现效果:

Qt连接MySQL数据库实例_第3张图片

(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);
}

 实现效果就是显示参数:

Qt连接MySQL数据库实例_第4张图片

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

(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<setStringList(dblist);
    ui->tableView->setModel(Qstrlistmodel);

}

显示效果如下:

Qt连接MySQL数据库实例_第5张图片

相当于实现了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<setStringList(tblist);
    ui->tableView->setModel(Qstrlistmodel);
}

 实现效果如下:

Qt连接MySQL数据库实例_第6张图片

Qt连接MySQL数据库实例_第7张图片

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

(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<setStringList(list);
    ui->tableView->setModel(Qstrlistmodel);

}

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

(7)查看表内容

Qt连接MySQL数据库实例_第8张图片

// 打开表内容
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。

 

 

你可能感兴趣的:(Qt,数据库,mysql,qt)