Windows下QT数据库初始创建
直接用QT自带的数据库模块,项目工程需要加一行:
QT += sql
所需头文件:
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlTableModel>
#include <QImageReader>
#include <QSqlError>
#include <QFile>
#include <QFileDialog>
#include <QBuffer>
#include <QDebug>
1.数据库连接的创建
QSqlDatabase类提供了对数据库的访问。创建数据库对象,确定使用的数据库类型,用来创建连接:(数据库连接使用连接名来定义,以下方式没有设置连接名,使用默认连接)
//数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 连接名为connect
// QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "connect");
db.setDatabaseName(QApplication::applicationDirPath() + "/data.db");
//打开数据库,即可访问数据库
if(!db.open())
{
qDebug() << "open error" << db.lastError();
}
2.数据库里数据表的创建
QSqlQuery类使用SQL语句来实现与数据库交互:
//访问数据库的操作包括:创建表 向数据表中插入数据 删除数据 更新数据 查询数据
//对于数据库中的表,通常只需要创建一次,而其他操作是可以重复的
//在创建该对象时,系统会自动完成跟数据库的关联
QSqlQuery query;
//定义一个创建表的sql语句 表名:fireData 表中的字段:id name age
QString sqlCreat = QString("create table table(id integer primary key autoincrement ,"
"time varchar(20) ,"
"position varchar(20) ,"
"region varchar(20) ,"
"photo varchar(20) ,"
"bytearry varchar(20));");
if(!query.exec(sqlCreat))
{
qDebug() << "creat table error" << db.lastError();
}
3.数据库数据连接到窗口部件
QSqlTableModel,QSqlQueryModel类是使用模型/视图框架实现的,实现了将数据库中的数据链接到窗口部件上。
保存结果集:
// QSqlQueryModel模型只提供可读模式,而QSqlTableModel不只能阅读数据库数据,还可以在UI界面编辑数据库数据(删除、修改、添加等)。
QSqlTableModel *m_sqlModel;
//初始化显示在UI界面的数据库表,前提是数据打开了
void Database::initableview()
{
m_sqlModel = new QSqlTableModel(this, db);
//选择数据库里的要设置的表
m_sqlModel->setTable("table");
// 设置为手动刷新,用来达到需要手动提交的效果
m_sqlModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
if (!m_sqlModel->select()) {
qDebug() << "查询失败";
qDebug() << m_sqlModel->lastError();
return;
}
m_sqlModel->setHeaderData(0, Qt::Horizontal, "ID");
m_sqlModel->setHeaderData(1, Qt::Horizontal, "时间");
m_sqlModel->setHeaderData(2, Qt::Horizontal, "经纬度");
m_sqlModel->setHeaderData(3, Qt::Horizontal, "行政区域");
m_sqlModel->setHeaderData(4, Qt::Horizontal, "图片");
ui->tableView->setModel(m_sqlModel);
//把QTableView中第一列的默认数字列去掉
// ui->tableView->verticalHeader()->setHidden(true);
//隐藏第1列
ui->tableView->hideColumn(0);
ui->tableView->hideColumn(5);
//自动调整该部分的大小以填充可用空间。
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//根据列内容来定列宽
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
//对数据表中某列单独设置固定宽度
ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed);
//设置固定宽度
ui->tableView->setColumnWidth(1, 130);
ui->tableView->setColumnWidth(2, 145);
//设置为不能编辑
ui->tableView->setEditTriggers(QTableView::NoEditTriggers);
}
以上只是初始化创建了一个数据库,并将数据库连接到窗口,显示到tableview控件上(显示的格式也进行了调整,设置了表头,和一些列宽)。