Qt数据库编程基础

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guimaxingtian/article/details/81326032

整理了一下在Qt下使用数据库的基础代码,有几个坑:
(1)要将plugins目录包含进去,可以选择在.pro文件中加INCLUDEPATH语句,也可以在cpp文件里加addlibrary语句,总之要把类似于“.\5.10.1\msvc2015_64\plugins”这样的目录包含进去;
(2)给连接命名后后续使用访问数据库的类时一定要绑定数据库,否则可能会出现“database not open”的报错;

//main.cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QtDebug>
#include <QSqlDriver>
#include <QSqlRecord>
#include <QSqlQueryModel>
#include <QSqlTableModel>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    //a.addLibraryPath ("D:\Qt\Qt5.10.1\5.10.1\msvc2015_64\plugins");

    //添加驱动,同时为这个连接赋一个名字"TestConn"
    /*注意,这里如果给连接命名了,那么之后使用Qt的QSqlQuery、
    QSqlQueryModel或者QSqlTableModel就需要绑定这个数据库,
    否则会报“database not open”的错误,下面的代码会有示例;
    如果不给连接命名,那么后面使用这些类就不需要绑定数据库*/
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL","TestConn");

    db.setHostName("localhost"); //连接本地数据库
    db.setDatabaseName("test");  //这个是数据库的名字
    db.setPort(3306);            //端口号
    db.setUserName("root");      //用户名
    db.setPassword("password");  //密码

    if(db.open())
        qDebug()<<QString::fromLocal8Bit ("数据库连接成功");
    else
        qDebug()<<QString::fromLocal8Bit ("数据库连接失败");

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

    QSqlQuery query(db);//绑定数据库
    query.exec("SELECT id,name,address FROM user3");
    while (query.next()) {
        int id = query.value (0).toInt ();
        QString name = query.value(1).toString();
        QString address = query.value(2).toString ();
        qDebug() << id<<" is: "<<name <<" address: "<< address;
    }

    QSqlTableModel tablemodel(NULL,db);//绑定数据库
    tablemodel.setTable ("user3");
    tablemodel.setSort (0, Qt::DescendingOrder);
    tablemodel.select ();
    int row =0;
    tablemodel.insertRows(row, 1);
    tablemodel.setData(tablemodel.index(row, 0), 4);
    tablemodel.setData(tablemodel.index(row, 1), "Peter Gordon");
    tablemodel.setData(tablemodel.index(row, 2), QString::fromLocal8Bit("南京东路"));

    //删除多行时一定要改一下编辑策略,不然不管count是多少只会删除一行数据
    //m_tablemodel.setEditStrategy (QSqlTableModel::OnManualSubmit);
    //tablemodel.removeRows (2,2);//删除行,第一个参数为行,第二个参数为删除几行(count)
    tablemodel.submitAll ();

    QSqlQueryModel model;
    model.setQuery("SELECT * FROM user3 ORDER BY id ASC", db);//绑定数据库

    for (int i = 0; i < model.rowCount(); ++i) {
        int id = model.record(i).value("id").toInt();
        QString name = model.record(i).value("name").toString();
        QString address = model.record(i).value("address").toString();
        qDebug() << id << name<< address;
    }

    return a.exec();
}
展开阅读全文

没有更多推荐了,返回首页