Qt操作SQLite數據庫
標簽: Qt
SQLite是一個進程內的輕量級嵌入式數據庫,它的數據庫就是一個文件,實現了自給自足、無服務器、零配置的、事務性的SQL數據庫引擎。Qt為SQLite操作提供了相應的接口,可以使我們在程序能輕松完成對SQLite數據庫的創建、刪除、插入、改寫、查找等操作。
下面以一個小例子說明Qt操作SQLite數據庫。
一.簡單界面
寫一個簡單的頁面,用于測試打開數據庫、建表、插入、讀表操作。
二.源碼
主要的注釋都寫在了源碼中,不難發現Qt對SQLite操作的關鍵就是組一條符合SQLite語法的命令,然后調用sql_q->exec(QString)運行之。SQLite的具體語法可見https://www.cnblogs.com/suzhen-2012/p/9955595.html,雖然本例程中未全涉及到增刪改查,但實現原理都是一樣的。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
QSqlDatabase db; //數據庫,用于打開一個數據庫
QSqlQuery *sql_q = NULL; //SQL數據庫操作類,用于操作數據庫
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
//打開數據庫
void MainWindow::on_pushButton_clicked()
{
db = QSqlDatabase::addDatabase("QSQLITE"); //參數說明庫類型為SQLite
db.setDatabaseName("MyDataBase.db"); //設置庫名
if (!db.open()) //打開庫,如果不存在將會自動創建
{
qDebug() << "Error: Failed to connect database." << db.lastError();
}
else
{
qDebug() << "Succeed to connect database." ;
sql_q = new QSqlQuery(db); //實例化數據庫操作類,參數很關鍵,必須是之前打開過的數據庫,此處為db
}
}
//打開表
void MainWindow::on_pushButton_2_clicked()
{
QString cmd; //SQL指令,下面進行組指令
cmd += "create table if not exists "; //組入“如果不存在,就創建表”的指令
cmd += ui->lineEdit->text(); //組入表名
cmd += "(id INTEGER PRIMARY KEY autoincrement,姓名 TEXT,年齡 int)";//組入表頭
qDebug()<<cmd;
if(!sql_q->exec(cmd)) //執行
{
qDebug() << "Error: Fail to create table."<< sql_q->lastError();
}
else
{
qDebug() << "Table opened!";
}
}
//插入一行
void MainWindow::on_pushButton_3_clicked()
{
QString cmd;
cmd += ("insert into ") + ui->lineEdit->text();
cmd += " (姓名,年齡)";
cmd += " values(" ;
cmd += '"' + ui->lineEdit_2->text() + '"' + "," + ui->lineEdit_3->text() + ")";
qDebug()<<cmd;
if(!sql_q->exec(cmd)) //執行
{
qDebug() << "Error: Fail to insert."<< sql_q->lastError();
}
else
{
qDebug() << "insert success!";
}
}
//顯示所選表所有內容
void MainWindow::on_pushButton_4_clicked()
{
QString cmd;
//選表
cmd += "select * from ";
cmd += '"' + ui->lineEdit->text() + '"';
if(!sql_q->exec(cmd)) //執行
{
qDebug() << "Error: Fail to select."<< sql_q->lastError();
}
else
{
qDebug() << "select success!";
}
while(sql_q->next())
{
qDebug()<<"id:"<<sql_q->value(0).toString()<<" 姓名:"<<sql_q->value(1).toString()<<" 年齡:"<<sql_q->value(2).toInt();
}
}
三.運行測試
運行程序后,先打開數據庫,然后創建名為"一班"的表,然后插入三個學生,最后讀取該表,看是否插入成功。
調試信息欄如下所示,說明運行正確
Succeed to connect database.
"create table if not exists 一班(id INTEGER PRIMARY KEY autoincrement,姓名 TEXT,年齡 int)"
Table opened!
"insert into 一班 (姓名,年齡) values(\"aaa\",18)"
insert success!
"insert into 一班 (姓名,年齡) values(\"bbb\",19)"
insert success!
"insert into 一班 (姓名,年齡) values(\"ccc\",20)"
insert success!
select success!
id: "1" 姓名: "aaa" 年齡: 18
id: "2" 姓名: "bbb" 年齡: 19
id: "3" 姓名: "ccc" 年齡: 20
然后再隨意創建幾個表,隨意插入幾個學生,最后用數據庫軟件打開Qt創建的數據庫,就可以直觀地看到你創建、記錄的數據了。
智能推薦
Qt中使用SQLite數據庫
前言 SQLite(sql)是一款開源輕量級的數據庫軟件,不需要server,可以集成在其他軟件中,非常適合嵌入式系統。 Qt5以上版本可以直接使用SQLite(Qt自帶驅動)。 用法 1 準備 引入SQL模塊 在Qt項目文件(.pro文件)中,加入SQL模塊: 引用頭文件 在需要使用SQL的類定義中,引用相關頭文件。例如: 2 使用 1. 建立數據庫 檢查連接、添加數據庫驅動、設置數據庫名稱、數...
Qt操作SQLite數據庫——創建、打開、關閉、增加、刪除和修改操作
QtSql模塊提供了與平臺以及數據庫種類無關的訪問SQL數據庫的接口,這個接口由利用Qt的模型視圖結構將數據庫與用戶界面集成的一套類來支持。QSqlDatabase對象象征了數據庫的關聯。Qt使用驅動程序與各種數據庫的應用編程接口進行通信。Qt的桌面版(Desktop Edition)包括如下一些驅動程序: 驅動程序 數據庫 QDB2 I...
iOS——SQLite數據庫操作
iOS——SQLite數據庫操作 首先介紹一下SQLite數據庫以及為什么要用ta: SQLite是一款輕型的嵌入式數據庫,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它的處理速度比Mysql、PostgreSQL這兩款著名的數據庫都還快。 數據庫的存儲結構和excel很像,以表(table)為單位 新建數據庫文件 新建一張表(table) 添加多個字...
python操作sqlite數據庫
SQLite數據庫是一款輕量級的數據庫,無服務器、零配置、事務性的SQL數據庫引擎。SQLite是世界上最廣泛部署的SQL數據庫引擎,而且SQLite的源代碼不受版權限制,是小型項目和簡單web應用的理想選擇。SQLite數據庫是一個單一的,不依賴于其他模塊與組件的數據庫文件,它允許我們直接訪問存儲文件。而且,SQLite也不需要針對特定的系統進行設置。python的標準庫中已經包含了支持SQLi...
猜你喜歡
SQLite數據庫的CRUD操作
1.新建名為DbHelper的SQLite數據庫打開助手類 2.新建名為MyDAO的數據庫訪問類 3.列表控件ListView使用的布局list_item.xml 4.最后編寫MainActivity 運行效果如下 參考文獻. 實驗代碼:MySQLite....
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...