08.QT中sqlite3数据库基本操作
Qt版本数据库操作
1 创建项目时选择sql模块
2 简易效果图如下
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;
}