QT建立数据库连接、增删改查示例

下面主要是对mysql数据库的操作,其它的数据库操作其实也类似:

1、在.pro文件中加入QT+= sql,如下图:



2、添加SQL相关头文件

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>

3、连接数据库

    qDebug()<<QSqlDatabase::drivers();    //查询支持的sql对象,下面调用的数据库实例QMYSQL就是从这里的结果确定的

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //数据库对象

    //连接数据库
    db.setHostName("192.168.0.1");            //数据库服务器IP
    db.setPort(3306);                        //端口
    db.setUserName("test");                 //数据库用户名
    db.setPassword("123456");               //数据库密码
    db.setDatabaseName("test");              //使用哪个数据库

    if( !db.open() ){       //数据库打开失败
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }

4、查询数据
我们把查到的数据放到一个tablewidget里,这样看起来直观:

    QStringList headerText;
    headerText<<"权限"<<"姓名"<<"密码";
    ui->tableWidget->setColumnCount(headerText.count());

    for(int i = 0;i<headerText.count();i++)
    {
        ui->tableWidget->setHorizontalHeaderItem(i,new QTableWidgetItem(headerText.at(i)));
    }

    QSqlQuery query;    //查询语句
    query.exec("select * from user;");

    qint32 rowNo = 0;

    while(query.next())
    {
        QTableWidgetItem *item;
        QStandardItem *sItem;

        qDebug()<<query.value(0).toString()<<":"<<query.value(1).toString()<<":"<<query.value(2).toString()<<":"<<query.value(3).toString();
        ui->tableWidget->insertRow(rowNo);

        for(int i=0;i<3;i++)
        {
             item = new  QTableWidgetItem(query.value(i+1).toString(),i);
             ui->tableWidget->setItem(rowNo,i,item);
        }
        rowNo++;
    }

可以看到查询结果:




5、新增数据
调用QSqlQuery  的query方法即可,查询错误可以使用其lastError函数读到命令失败的错误原因

    QSqlQuery query;

    QString sqls = QString("insert into user values(%1,%2,%3,%4);")
            .arg(11).arg(2).arg("'test1'").arg("'test1'");

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

6、删除数据

    QSqlQuery query;

    //删除ID=11的用户
    QString sqls = QString("delete from user where id = %1").arg(11);

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

7、修改数据

     QString sqls = QString("update user set username = %1 where id = %1;")
             .arg("'user1'").arg(10);

    qDebug()<<sqls;

    if(query.exec(sqls))
    {
        qDebug()<<"成功";
    }
    else
    {
        qDebug()<<"失败";
        qDebug()<<query.lastError();
    }

其它的操作如表操作之类的都是sql的填写拼接的问题,就不多描述了。

8、Qt连接MySQL的时候提示“QSqlDatabase: QMYSQL driver not loaded”,可能是缺少库文件libmysql.dll,可以从msyql的安装目录里找到这个文件并放在QT安装目录的编译器目录下的bin目录下,比如“C:\Qt\Qt5.9.0\5.9\mingw53_32\bin”
如果这样依旧不行,检查安装的mysql的位数是否和QT的一致,如果不一致到这个地址:
https://dev.mysql.com/downloads/connector/c/
下载mysql-connector-c,在其lib目录中找到文件“libmysql.dll”,将这个文件复制到Qt的bin目录下,重启Qt Creator后即可正确运行。
总之,要确保程序运行环境下libmysql.dll这个文件对应的mysql的位数与QT的位数相同。

猜你喜欢

转载自blog.csdn.net/zhangfls/article/details/114279217
今日推荐