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