Windows下QT数据库功能实现,可以UI界面进行数据交互(一)

Windows下QT数据库初始创建

直接用QT自带的数据库模块,项目工程需要加一行:

QT += sql

所需头文件:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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控件上(显示的格式也进行了调整,设置了表头,和一些列宽)。

你可能感兴趣的:(qt,开发语言,数据库)