QT中使用MySQL数据库

QT中使用MySQL数据库

1.连结MySQL
首先正确安装MySQL数据库。
然后将libmysql.lib文件放在QT安装路径下的对应编译器的lib文件夹下,如F:\software\QT5.9.5\5.9.5\mingw53_32\lib。将libmysql.dll文件放在QT安装路径对应编译器的bin文件夹下。
最后可正常连结使用数据库。

    ui->setupUi(this);
    QSqlQuery query;
    mutex.lock();//互斥锁,可以不用
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL""aaa");
    //QMYSQL不要变,aaa为连接名,可随意命名,当一个程序有多个地方需要连结数据库时最好使用连接名。
    //如使用则下面的query = QSqlQuery("",db)
    //不使用则:QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");query = QSqlQuery(db)
    db.setHostName("localhost");//主机名
    db.setPort(3306);//端口号,一般为3306,若安装数据库时更改则需要做相应的更改
    db.setUserName("root");//用户名
    db.setPassword("pusong");//密码
    db.setDatabaseName("ps");//数据库名,在连结前需要保证数据库中已经创建了该数据库,创建语句:create database ps;
    bool flag = db.open();//判断是否成功连结标志
    if(flag == true)
    {
        QMessageBox::information(NULL,"消息提示","成功连接数据库");
    }
    else
    {
    //未能成功的错误原因追踪
        QMessageBox::critical(NULL,"消息提示","连接数据库失败");
        QSqlError error;
        error=db.lastError();
        if(error.isValid())//发生错误时isValid()返回true
        {
            switch (error.type())
            {
            case QSqlError::NoError:
                qDebug()<<"无错误";
                break;
            case QSqlError::ConnectionError://连接错语
                qDebug()<<error.text();
                break;
            case QSqlError::StatementError://语句错语
                qDebug()<<error.text();
                break;
            case QSqlError::TransactionError://事务错误
                qDebug()<<error.text();
                break;
            default://未知错误
                qDebug()<<error.text();
                break;
            }
        }
    }
    mutex.unlock();//互斥锁,前面未用则删除
    query = QSqlQuery(db);

2.QSqlQuery

2.1 query.exec("…")
执行sql语句query.exec("…"),主要应用于查询、创建、删除

    QString compren = QString("select * from AK;");//全表查询
    bool fflag = query.exec(compren);
query.exec("create table motorZuyuan(id int primary key,well int,valve int)");
query.exec("DROP table motorZuyuan");

2.2 query.next()
SqlQuery提供了一个访问一条查询结果记录的方法。在调用了exec()方法之后,QSqlQuery的内部指针定位到了第一条记录之前的位置。我们必须调用一次QSqlQuery::next()内部指针就移动到第一条记录上(第一行),然后重复调用next()方法就可以移动到其他记录上,直到该函数返回false为止。所以一般需要建立while循环。

2.3 query.value(…)
SqlQuery::value()函数返回当前记录的行一个字段值。字段的索引号从0开始计数。QSqlQuery::value()返回一个QVariant,这个类型可以保存各种C++和核心的Qt数据类型,比如int, QString和QByteArray等。不同的数据库类型将自动地映射到最近的Qt等价类型。可以使用toInt,toString,toDouble等转换为自己需要的结果。

        while(query.next())
        {
            qDebug()<<"id"<<query.value("id").toDouble();//该行id列的值
            qDebug()<<"frist_one"<<query.value("Ak_num_one").toDouble();//该行AK_num_one列的值
            qDebug()<<"second_two"<<query.value("Ak_num_two").toDouble();
            qDebug()<<"thrid_three"<<query.value("Ak_num_three").toDouble();
        }

2.4 query.prepare("…")
一般用于插入,删除,更新。此函数语句可利用变量操作数据库
bindValue()名称绑定
addBindValue()顺序/位置绑定

    QString insert="insert into motorZuyuan"
                       "(id,well,valve) "
                       "values(:id,:well,:valve);";


    bool insertfalg =query.prepare(insert);//插入操作
    if(insertfalg == false)
    {
        qDebug()<<query.lastError();
    }
    else
    {
        qDebug()<<"insert init!";
    }
    query.bindValue(":id",k);
    query.bindValue(":well",-1);
    query.bindValue(":valve",-1);
    query.exec();
query.prepare("INSERT INTO employee (id, name, salary) "
              "VALUES (?, ?, ?)");
query.addBindValue(1001);
query.addBindValue("Thad Beaumont");
query.addBindValue(65000);
query.exec();

3. 可通过命令行运行框查看操作数据库
当某数据库中有表时可使用:desc 表名; 来查看表中的数据
创建表:create table 表名
创建数据库:create database 库名
删除:drop 表名/库名
QT中使用MySQL数据库_第1张图片

你可能感兴趣的:(Qt,c++)