一、Qt和MySQL版本

二、Qt使用数据库

1、新建项目,在.pro中添加,并构建项目

QT            +=  sql

2、添加头文件

#include <QSqlDatabase>

#include <QSqlQuery>

#include <QSqlError>

3、查询数据库驱动

qDebug() << QSqlDatabase::drivers();

输出,表示有以下数据库驱动:

("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")

4、连接数据库

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

db.setHostName("127.0.0.1");        //本地服务器IP

db.setPart(3306);                           //端口号

db.setDatabaseName("test");          //数据库名称,

db.setUserName("root");                //用户名

db.setPassword("");                       //密码

if(!db.open())                                   //打开数据库

{

        qDebug() << db.lastError();

}

db.close();                                        //关闭数据库

5、创建数据表

QSqlQuery query;

bool ok = query.exec("create table student(id int primary key auto_increment, name varchar(255), age int, score int)ENGINE=INNODB;");

if(!ok)

{

        qDebug() << query.lastError();

}

6、数据插入

QSqlQuery query;

bool ok = query.exec("insert into student(id, name, age, score) values(1, '张三', 18, 80)");

if(!ok)

{

        qDebug() << query.lastError();

}

7、数据修改

QSqlQuery query;

bool ok = query.exec("update student set score=100 where name='张三' ");

if(!ok)

{

        qDebug() << query.lastError();

}

8、数据查询

QSqlQuery query;

bool ok = query.exec("select id from student where name='张三' ");

if(!ok)

{

        qDebug() << query.lastError();

}

else

{

        query.next();

        qDebug() << query.value(0).toInt();

}

//遍历整个表

ok = query.exec("select *from student");

if (!ok)

{

        qDebug()<< query.lastError();

}

else

{

        while(query.next()) //遍历完为false

        {

                //方式1:以下标

                qDebug()<< query.value(0).toInt()<< query.value(1).toString()

                << query.value(2).toInt() << query.value(3).toInt();

                //方式2:以字段

                //qDebug()<< query.value("id").toInt()<< query.value("name").toString()

                //<< query.value("age").toInt()<< query.value("score").toInt();

        }

}

9、数据删除

QSqlQuery query;

bool ok = query.exec("delete from student where name='张三' ");

if(!ok)

{

        qDebug() << query.lastError();

}

10、删除整个表

QSqlQuery query;

bool ok = query.exec("drop table student");

if(!ok)

{

        qDebug() << query.lastError();

}

三、全部代码

    //查看数据库驱动
    qDebug() << QSqlDatabase::drivers();

    //连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");    //数据库服务器IP,本地服务器
    db.setPort(3306);               //端口号
    db.setDatabaseName("test");     //数据库名
    db.setUserName("root");         //用户名
    db.setPassword("");       //密码
    bool ok = db.open();
    if (!ok)
    {
        qDebug()<< "open sql error:" << db.lastError();
    }
    //db.close();

    //创建表
    QSqlQuery query;
    ok = query.exec("create table student(id int primary key auto_increment, "
                    "name varchar(255), age int, score int)ENGINE=INNODB;");
    if (!ok)
    {
        qDebug()<< "create table:" << query.lastError();
    }

    //单行插入
    ok = query.exec("insert into student(id, name, age, score) values(1, '张三', 18, 80)");
    if (!ok)
    {
        qDebug()<< "insert into error:" << query.lastError();
    }

    //多行插入
    query.prepare("insert into student(name, age, score) values(?,?,?)");   //?是占位符
    QVariantList name;
    QVariantList age;
    QVariantList score;

    name << "李四" << "王五" << "赵六";
    age << 19 << 20 << 21;
    score << 85 << 90 << 95;

    //按顺序给字段绑定相应的值
    query.addBindValue(name);
    query.addBindValue(age);
    query.addBindValue(score);

    //执行预处理命令
    ok = query.execBatch();
    if (!ok)
    {
        qDebug()<< "execBatch error:" << query.lastError();
    }

    //修改
    ok = query.exec("update student set score=100 where name='张三'");
    if (!ok)
    {
        qDebug()<< "update error:" << query.lastError();
    }

    //查询
    query.exec(QString("select id from student where name='赵六'"));
    if (!ok)
    {
        qDebug()<< "select *from error:" << query.lastError();
    }
    else
    {
        query.next();
        qDebug() << query.value(0).toInt();
    }

    //遍历
    ok = query.exec("select *from student");
    if (!ok)
    {
        qDebug()<< "select *from error:" << query.lastError();
    }
    else
    {
        while(query.next())   //遍历完为false
        {
            //方式1:以下标
            qDebug()<< query.value(0).toInt()<< query.value(1).toString()
                    << query.value(2).toInt()<< query.value(3).toInt();

            //方式2:以字段
            //qDebug()<< query.value("id").toInt()<< query.value("name").toString()
                        //<< query.value("age").toInt()<< query.value("score").toInt();
        }
    }

    //删除某一行
    ok = query.exec("delete from student where name='张三'");
    if (!ok)
    {
        qDebug()<< "delete error:" << query.lastError();
    }

    //删除整个表
    ok = query.exec("drop table student");
    if (!ok)
    {
        qDebug()<< "drop table error:" << query.lastError();
    }

    db.close();//关闭数据库

四、当连接数据库时,提示:QSqlDatabase:QMYSQL driver not loaded

解决办法:

方式1:

        把C:\Program Files\MySQL\MySQL Server 8.0\lib目录下的libmysql.dll拷贝到Qt安装目录下的D:\Qt\Qt5.12.0\5.12.0\mingw73_64\bin目录中;(以上两个目录是我的安装目录)

        重启Qt,重新运动程序;

方式2:

        安装MySQL Workbench时,安装Connector/C++8.0.28-X86

方式3:

        卸载重装MySQL Workbench,重启电脑,再打开Qt,测试;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐