QT项目开发之数据库模型

SQL常用的模型有三种,查询模型,关系表格模型,表格模型,在这里我只讲查询模型,并用一个段代码来加之说明.

QSqlQueryModel提供了一个基于SQL查询的只读模型,我们创建一个新的工程,选择新建GUI项目,项目名称sqlModel,类名MainWindow,基类选择QMainWindow.完成后在sqlModel.pro中添加QT+=sql.  在往项目中添加C++头文件,名称为concention.h.


concention.h.文件内容如下:

#ifndef CONNECTION_H
#define CONNECTION_H

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>

/* 使用默认数据库连接创建了student和course两张表     */
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("my.db");
    if (!db.open()) {
        QMessageBox::critical(0, "Cannot open database1",
            "Unable to establish a database connection.", QMessageBox::Cancel);
        return false;
    }

    QSqlQuery query;

    query.exec(QString("create table student (id int primary key, "
               "name varchar, course int)"));
    query.exec(QString("insert into student values(1, '张三', 11)"));
    query.exec(QString("insert into student values(2, '李四', 11)"));
    query.exec(QString("insert into student values(3, '王麻子', 12)"));

    query.exec(QString("create table course (id int primary key, "
               "name varchar, teacher varchar)"));
    query.exec(QString("insert into course values(10, C语言', '丹尼斯·里奇')"));
    query.exec(QString("insert into course values(11, 'C++', '本贾尼·斯特劳斯特卢普')"));
    query.exec(QString("insert into course values(12, 'Pytjon', 'Guido van Rossum')"));
    return true;
}


#endif // CONNECTION_H

这里和我们上一篇文章是一样的,只是需要注意这里创建的是默认数据库链接,addDatabase("QSQLITE")这里没有制定连接名称,我们QSqlQuery query;这里也就不需要去制定查找那个项目名称.


main.cpp

#include <QtGui/QApplication>
#include "mainwindow.h"
#include "connection.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

    if (!createConnection()) return 1;
    MainWindow w;
    w.show();
    
    return a.exec();
}

上面代码有两行是对于中文编码乱码使用的,第一个是针对tr类,第二个是String数据库命令中的. 主函数只创建了一个数据库链接,如果失败直接返回错误,结束程序运行.


mianwindow.cpp代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QTableView>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlQueryModel *model = new QSqlQueryModel(this);
    model->setQuery("select * from student");
    model->setHeaderData(0, Qt::Horizontal, tr("学号"));
    model->setHeaderData(1, Qt::Horizontal, tr("姓名"));
    model->setHeaderData(2, Qt::Horizontal, tr("课程"));
    model->setQuery(QString("insert into student values(5,'Linux_Google',11)"));
    model->setQuery("select * from student");
    QTableView *view = new QTableView(this);
    view->setModel(model);
    setCentralWidget(view);
}

MainWindow::~MainWindow()
{
    delete ui;
}

这里创建了一个QSqlQueryModel对象,然后使用setQuery来执行SQL语句来查询student表格,注意这里我们是默认连接,也就不需要去查询数据库的名字.setHeaderData设置要显示的表头.后面创建了一个视图.并且将 QSqlQueryModel对象作为要显示的模型.这里需要注明一点,如果我们对数据库操作了,我们应该用model->setQuery("select * from student");去重新获取query.  界面效果显示如下:



                                                                                                      文章出自:Linux_Google

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页