08.QT中sqlite3数据库基本操作

Qt版本数据库操作

1 创建项目时选择sql模块

08.QT中sqlite3数据库基本操作

 

2 简易效果图如下 

 

08.QT中sqlite3数据库基本操作

 

 

 

3 代码如下图所示

#include "SqliteDemo.h"

#include <QtSql/QSqlDatabase>

#include <QtSql/QSqlRecord>

#include <QtSql/QSqlQuery>

#include <QtSql/QSqlQueryModel>

#include "QTableView"

#include <QDebug>

#include <QMessageBox>

 

SqliteDemo::SqliteDemo(QWidget *parent)

    : QMainWindow(parent)

{

    ui.setupUi(this);

 

    //检查数据库的连接是否存在

    if (QSqlDatabase::contains("qt_sql_default_connection"))

    {

        db = QSqlDatabase::database("qt_sql_default_connection");

    }

    else

    {

        db = QSqlDatabase::addDatabase("QSQLITE");

    }

  

    db.setDatabaseName(QApplication::applicationDirPath() + "/config/" + "config.db");

    if (!db.open())

    {

        QMessageBox::about(this, "database", "database open failed");

    }

 

    connect(ui.createBtn, SIGNAL(clicked()), this, SLOT(createTableSlot()));

    connect(ui.insertBtn, SIGNAL(clicked()), this, SLOT(insertBtnSlot()));

    connect(ui.deleteBtn, SIGNAL(clicked()), this, SLOT(deleteBtnSlot()));

    connect(ui.updateBtn, SIGNAL(clicked()), this, SLOT(updateBtnSlot()));

    connect(ui.queryBtn, SIGNAL(clicked()), this, SLOT(queryBtnSlot()));

 

    model = new QSqlQueryModel;

    view = new QTableView;

 

}

 

//构造函数

SqliteDemo::~SqliteDemo()

{

    delete model;

    delete view;

    db.close();

}

 

//创建数据库表

void SqliteDemo::createTableSlot(void)

{

    QSqlQuery sql_query(db);

    QString sql = "create table pointInfo(id integer primary key autoincrement , name varchar(30),longitude double, latitude double, altitude double)";

 

    sql_query.prepare(sql);

    if (!sql_query.exec())

    {

        QMessageBox::about(this, "create table", "Failed to create table.");

    }

    else

    {

        qDebug() << "Table created ok!";

        QMessageBox::information(this, "create table", "create table ok!");

    }

 

}

//插入一条数据

void SqliteDemo::insertBtnSlot(void)

{

    QSqlQuery sql_query(db);

 

    QString sql = "insert into pointInfo values(?,?, ?, ?, ?)";

   

    sql_query.prepare(sql);

//  sql_query.bindValue(0, 1);

    sql_query.bindValue(1, "start");

    sql_query.bindValue(2, 120.12233);

    sql_query.bindValue(3, 45.12233);

    sql_query.bindValue(4, 5000);

 

    if (!sql_query.exec())

    {

        QMessageBox::about(this, "insert table", "Failed to insert pointInfo.");

    }

    else

    {

        QMessageBox::information(this, "insert", "insert ok!");

    }

 

}

//删除一条数据,清空数据库中所有数据

void SqliteDemo::deleteBtnSlot(void)

{

    QSqlQuery sql_query(db);

 

    QString sql = "delete from pointInfo";

 

    sql_query.prepare(sql);

 

    if (!sql_query.exec())

    {

        QMessageBox::about(this, "delete", "delete Failed.");

    }

    else

    {

        //QMessageBox::information(this, "delete", tr("delete record all ok"));

       

        QMessageBox::information(this, "delete", QStringLiteral("删除所有记录"));

    }

 

}

//更新一条记录, 此处未进行任何更新

void SqliteDemo::updateBtnSlot(void)

{

    if (view != NULL)

    {

        view->show();

    }

 

}

//查询操作

void SqliteDemo::queryBtnSlot(void)

{

    model->setQuery("SELECT * FROM pointInfo");

    model->setHeaderData(0, Qt::Horizontal, QStringLiteral("id"));

    model->setHeaderData(1, Qt::Horizontal, QStringLiteral("名称"));

    model->setHeaderData(2, Qt::Horizontal, QStringLiteral("经度"));

    model->setHeaderData(3, Qt::Horizontal, QStringLiteral("纬度"));

    model->setHeaderData(4, Qt::Horizontal, QStringLiteral("高度"));

 

    //需要考虑内存释放的问题

    view->setColumnWidth(5, 20);

    view->resize(800, 500);

    view->setModel(model);

    view->show();

 

    qDebug() << " model:" << model;

    qDebug() << " view:" << view;

 

}