Qt下Sqlite數據庫操作
標簽: QT
Sqlite數據庫作為Qt項目開發中經常使用的一個輕量級的數據庫,可以說是兼容性相對比較好的數據庫之一(Sqlite就像Qt的親兒子,如同微軟兼容Access數據庫一樣)。關于Sqlite和Qt的千絲萬縷的故事,有機會再說(各位看官查一查也可以自己search一下)。這里簡單說說Sqlite數據庫的用法吧。
一、sql語句和部分接口函數
1、在.pro文件中記得增加 :
QT += core gui sql
2、sqlite數據庫的增刪查改【接口函數參見代碼】
-
#ifndef SQLITEDBAOPERATOR_H
-
#define SQLITEDBAOPERATOR_H
-
#include"generalheaders.h"
-
#include <QSqlDatabase>
-
#include <QSqlQuery>
-
#include <QSqlQueryModel>
-
#include <QDebug>
-
#include <QSqlError>
-
class SqliteDBAOperator
-
{
-
public:
-
SqliteDBAOperator();
-
~SqliteDBAOperator();
-
public:
-
//創建數據庫并建立連接
-
bool OpenDb(void);
-
//創建數據表(student)
-
void createTable(void);
-
//在表格中增加新的字段
-
void addNewcolumn(QString &columnNameAndproperty);
-
//查詢和顯示結果
-
void queryTable(QString& str);
-
//判斷數據表是否存在
-
bool IsTaBexists(QString& Tabname);
-
//插入數據
-
void singleinsertdata(w2dba &singledb);//插入單條數據
-
void Moreinsertdata(QList<w2dba> &moredb);//插入多條數據
-
//刪除數據
-
void deletedata();
-
//修改數據
-
void updatedata();
-
//關閉數據庫
-
void closeDb(void);
-
private:
-
QSqlDatabase db;//用于建立和數據庫的連接
-
};
-
#endif // SQLITEDBAOPERATOR_H
這里w2dba 是自己定義的一個結構體類型的數據。各位可以根據自己實際需要修改。 因為c++開發面向對象的思想,所以我個人通常是在確定一個對象后,再思考這個對象的衣食住行、拉屎放屁、能夠公開交流的、或者只能私有的都有哪些東西,接著根據這個對象的應有的特點,編寫對應的函數盡量讓這個對象鮮活飽滿,但是春光不會外泄出來(==》純屬小弟個人微不足道的理解,不喜勿噴。更多精彩畫面,自行腦補)。
-
/*Sqlite數據庫操作*/
-
#include "sqlitedbaoperator.h"
-
#include"generalheaders.h"
/*構造函數中初始化數據庫對象,并創建連接*/
-
SqliteDBAOperator::SqliteDBAOperator()
-
{
-
QSqlDatabase database;
-
if (QSqlDatabase::contains("qt_sql_default_connection"))
-
{
-
database = QSqlDatabase::database("qt_sql_default_connection");
-
}
-
else
-
{
-
//建立和sqlite數據的連接
-
db = QSqlDatabase::addDatabase("QSQLITE");
-
//設置數據庫文件的名字
-
QString dbname = QDir::currentPath() +QString("/")+ QString("MACAddrs.db");
-
db.setDatabaseName(dbname);
-
}
-
}
-
/*析構函數關閉數據庫連接*/
-
SqliteDBAOperator::~SqliteDBAOperator()
-
{
-
db.close();
-
}
-
//打開數據庫
-
bool SqliteDBAOperator::OpenDb(void)
-
{
-
//打開數據庫
-
if(db.open() == false){
-
qDebug() << "連接數據失敗!";
-
return false;
-
}
-
qDebug() << "連接數據庫成功";
-
return true;
-
}
-
//判斷數據庫中某個數據表是否存在
-
bool SqliteDBAOperator::IsTaBexists(QString& Tabname)
-
{
-
QSqlDatabase db = QSqlDatabase::database();
-
if(db.tables().contains(Tabname))
-
{
-
return true;
-
}
-
return false;
-
}
-
//創建數據表
-
void SqliteDBAOperator::createTable(void)
-
{
-
//用于執行sql語句的對象
-
QSqlQuery query;
-
//構建創建數據庫的sql語句字符串
-
QString str = QString("CREATE TABLE MACAddrs (\
-
ID INT PRIMARY KEY NOT NULL,\
-
Type TEXT NOT NULL,\
-
ProduceTime TEXT NOT NULL)");
-
//執行sql語句
-
query.exec(str);
-
}
-
void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)
-
{
-
}
-
//查詢和顯示結果
-
void SqliteDBAOperator::queryTable(QString& str)
-
{
-
QSqlQuery query;
-
//構建創建數據庫的sql語句字符串
-
str = QString("SELECT ID,Type,MACADDR FROM MACAddrs");
-
//執行sql語句,并將結果集保存到model
-
query.exec(str);
-
}
-
//單條插入
-
void SqliteDBAOperator::singleinsertdata(w2dba &singledb)
-
{
-
QSqlQuery query;
-
query.prepare("INSERT INTO MACAddrs VALUES (:ID,:Type,:ProduceTime)");
-
query.bindValue(":ID", singledb.id);
-
query.bindValue(":Type", singledb.type);
-
query.bindValue(":ProduceTime",singledb.prodceTime);
-
query.exec();
-
}
-
//多條插入
-
void SqliteDBAOperator::Moreinsertdata(QList<w2dba>& moredb)
-
{
-
QSqlQuery query;
-
query.prepare("insert into MACAddrs values (?,?,?,?,?,?,?,?)");
-
QVariantList idlist,snlist,typelist,MACAddrlsit,produceTimelist,Pieceslist,Operatorlist,OperateStatlist;
-
for(int i=0; i< moredb.size(); i++)
-
{
-
idlist << moredb.at(i).id;
-
typelist << moredb.at(i).type;
-
produceTimelist << moredb.at(i).prodceTime;
-
}
-
query.addBindValue(idlist);
-
query.addBindValue(MACAddrlsit);
-
query.addBindValue(produceTimelist);
-
if (!query.execBatch())
-
{
-
qDebug() << query.lastError();
-
}
-
}
-
//刪除一條數據
-
void SqliteDBAOperator::deletedata()
-
{
-
//比較簡單,自行補充
-
}
-
//修改
-
void SqliteDBAOperator::updatedata()
-
{
-
//比較簡單,自行補充
-
}
-
void SqliteDBAOperator::closeDb(void)
-
{
-
db.close();
-
}
這部分可能稍微有點意思的就是帶參SQL語句的編寫,在數據的單條插入和多條插入中,使用了兩種不同的方法,各位可以自行查看。
二、接口函數的檢測
1、windows下sqlite數據庫的安裝:
(1) 前往www.sqlite.org.com下載相應的數據庫文件,然后在創建路徑并在 c:\sqilte3 路徑下將文件解壓(路徑可自己定義);
(2)設置環境變量,將數據庫路的路徑增加到PATH變量下。
(3)環境配置完成,重啟電腦,配置生效。
(4)數據庫操作
1>創建或打開數據庫
通過cd 命令到.db數據庫文件所在的目錄下,如果沒有文件自己創建一個。
這里在C盤的根目錄下創建一個test.db的數據庫文件
敲擊回車后進入sqlite數據庫,顯示如下:
(2)前面簡單的數據庫基本配置工作已經完成,現在開始數據庫的操作部分
首先,我們要創建一張數據表:
sql語句:
CREATE TABLE MACAddrs ( ID INT PRIMARY KEY NOT NULL,Type TEXT NOT NULL,ProduceTime TEXT );
查看表格是否創建成功 以及表頭內容:
.tables
.schema
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
bool ok = db.open();
if (ok == true)
{
QSqlQuery query;
query.exec("SELECT * from info");
QString string;
while (query.next())
{
QString id = query.value(0).toString();
qDebug() < string += id + "\n";
QString name = query.value(1).toString();
string += name + "\n";
}
qDebug() < ui->TextEdit->setText(string);
}
else
{
QMessageBox::information(this, "ERROR", "open database error");
}
db.close();
}
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
bool ok = db.open();
if (ok == true)
{
QSqlQuery query;
query.prepare("INSERT INTO info (id, name) "
"VALUES (:id, :name)");
query.bindValue(":id", ui->IdEdit->text().toInt());
query.bindValue(":name", ui->NameEdit->text());
query.exec();
ui->IdEdit->clear();
ui->NameEdit->clear();
this->on_QueryButton_clicked();
}
else
{
QMessageBox::information(this, "ERROR", "open database error");
}
db.close();
}
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
bool ok = db.open();
if (ok == true)
{
QSqlQuery query;
QString command="DELETE FROM info WHERE ";
if (ui->IdEdit->text().isEmpty() == false)
{
command.append("id="+ui->IdEdit->text());
query.exec(command);
}
else if (ui->NameEdit->text().isEmpty() == false)
{
command +="name=\'" + ui->NameEdit->text() + "\'";
qDebug()< query.exec(command);
}
else
{
QMessageBox::information(this, "ERROR", "open database ok! delete error");
}
ui->IdEdit->clear();
ui->NameEdit->clear();
this->on_QueryButton_clicked();
}
else
{
QMessageBox::information(this, "ERROR", "open database error");
}
db.close();
}
智能推薦
Qt之Sqlite數據庫
Qt之Sqlite數據庫 概述: 代碼示例: 初始化并打開數據庫 查詢表數據 更新一條數據 插入一條數據 刪除一條數據 over: 文末一句話: 概述: 1. Sqlite是一款輕量級的關系型數據庫,運行速度非常快,通常是需要幾百KB的內存就夠 2. 數據庫可視化軟件官方下載鏈接 https://sqlitebrowser.org/dl/ 3. 本人下載使用版本為(圖片) 4. 運行DB Brow...
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...
猜你喜歡
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...