• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Qt下Sqlite數據庫操作

    標簽: QT

     Sqlite數據庫作為Qt項目開發中經常使用的一個輕量級的數據庫,可以說是兼容性相對比較好的數據庫之一(Sqlite就像Qt的親兒子,如同微軟兼容Access數據庫一樣)。關于Sqlite和Qt的千絲萬縷的故事,有機會再說(各位看官查一查也可以自己search一下)。這里簡單說說Sqlite數據庫的用法吧。

    一、sql語句和部分接口函數

    1、在.pro文件中記得增加 :

    QT       += core gui sql
     

    2、sqlite數據庫的增刪查改【接口函數參見代碼】

     
    1. #ifndef SQLITEDBAOPERATOR_H

    2. #define SQLITEDBAOPERATOR_H

    3. #include"generalheaders.h"

    4. #include <QSqlDatabase>

    5. #include <QSqlQuery>

    6. #include <QSqlQueryModel>

    7. #include <QDebug>

    8. #include <QSqlError>

    9. class SqliteDBAOperator

    10. {

    11. public:

    12. SqliteDBAOperator();

    13. ~SqliteDBAOperator();

    14. public:

    15. //創建數據庫并建立連接

    16. bool OpenDb(void);

    17. //創建數據表(student)

    18. void createTable(void);

    19. //在表格中增加新的字段

    20. void addNewcolumn(QString &columnNameAndproperty);

    21. //查詢和顯示結果

    22. void queryTable(QString& str);

    23. //判斷數據表是否存在

    24. bool IsTaBexists(QString& Tabname);

    25. //插入數據

    26. void singleinsertdata(w2dba &singledb);//插入單條數據

    27. void Moreinsertdata(QList<w2dba> &moredb);//插入多條數據

    28. //刪除數據

    29. void deletedata();

    30. //修改數據

    31. void updatedata();

    32. //關閉數據庫

    33. void closeDb(void);

    34. private:

    35. QSqlDatabase db;//用于建立和數據庫的連接

    36. };

    37.  
    38. #endif // SQLITEDBAOPERATOR_H

    這里w2dba 是自己定義的一個結構體類型的數據。各位可以根據自己實際需要修改。 因為c++開發面向對象的思想,所以我個人通常是在確定一個對象后,再思考這個對象的衣食住行、拉屎放屁、能夠公開交流的、或者只能私有的都有哪些東西,接著根據這個對象的應有的特點,編寫對應的函數盡量讓這個對象鮮活飽滿,但是春光不會外泄出來(==》純屬小弟個人微不足道的理解,不喜勿噴。更多精彩畫面,自行腦補)。

     

     
    1. /*Sqlite數據庫操作*/

    2.  
    3. #include "sqlitedbaoperator.h"

    4. #include"generalheaders.h"

    /*構造函數中初始化數據庫對象,并創建連接*/
     
    1. SqliteDBAOperator::SqliteDBAOperator()

    2. {

    3. QSqlDatabase database;

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

    5. {

    6. database = QSqlDatabase::database("qt_sql_default_connection");

    7. }

    8. else

    9. {

    10. //建立和sqlite數據的連接

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

    12. //設置數據庫文件的名字

    13. QString dbname = QDir::currentPath() +QString("/")+ QString("MACAddrs.db");

    14. db.setDatabaseName(dbname);

    15. }

    16. }

     
     
    1. /*析構函數關閉數據庫連接*/

    2. SqliteDBAOperator::~SqliteDBAOperator()

    3. {

    4. db.close();

    5. }

    6.  
    7. //打開數據庫

    8. bool SqliteDBAOperator::OpenDb(void)

    9. {

    10. //打開數據庫

    11. if(db.open() == false){

    12. qDebug() << "連接數據失敗!";

    13. return false;

    14. }

    15. qDebug() << "連接數據庫成功";

    16. return true;

    17. }

    18.  
    19. //判斷數據庫中某個數據表是否存在

    20. bool SqliteDBAOperator::IsTaBexists(QString& Tabname)

    21. {

    22. QSqlDatabase db = QSqlDatabase::database();

    23. if(db.tables().contains(Tabname))

    24. {

    25. return true;

    26. }

    27. return false;

    28. }

    29.  
    30.  
    31. //創建數據表

    32. void SqliteDBAOperator::createTable(void)

    33. {

    34. //用于執行sql語句的對象

    35. QSqlQuery query;

    36. //構建創建數據庫的sql語句字符串

    37. QString str = QString("CREATE TABLE MACAddrs (\

    38. ID INT PRIMARY KEY NOT NULL,\

    39. Type TEXT NOT NULL,\

    40. ProduceTime TEXT NOT NULL)");

    41. //執行sql語句

    42. query.exec(str);

    43. }

    44.  
    45. void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)

    46. {

    47. }

    48.  
    49. //查詢和顯示結果

    50. void SqliteDBAOperator::queryTable(QString& str)

    51. {

    52. QSqlQuery query;

    53. //構建創建數據庫的sql語句字符串

    54. str = QString("SELECT ID,Type,MACADDR FROM MACAddrs");

    55. //執行sql語句,并將結果集保存到model

    56. query.exec(str);

    57. }

    58.  
    59.  
    60. //單條插入

    61. void SqliteDBAOperator::singleinsertdata(w2dba &singledb)

    62. {

    63. QSqlQuery query;

    64. query.prepare("INSERT INTO MACAddrs VALUES (:ID,:Type,:ProduceTime)");

    65. query.bindValue(":ID", singledb.id);

    66. query.bindValue(":Type", singledb.type);

    67. query.bindValue(":ProduceTime",singledb.prodceTime);

    68. query.exec();

    69. }

    70.  
    71. //多條插入

    72. void SqliteDBAOperator::Moreinsertdata(QList<w2dba>& moredb)

    73. {

    74. QSqlQuery query;

    75. query.prepare("insert into MACAddrs values (?,?,?,?,?,?,?,?)");

    76. QVariantList idlist,snlist,typelist,MACAddrlsit,produceTimelist,Pieceslist,Operatorlist,OperateStatlist;

    77. for(int i=0; i< moredb.size(); i++)

    78. {

    79. idlist << moredb.at(i).id;

    80. typelist << moredb.at(i).type;

    81. produceTimelist << moredb.at(i).prodceTime;

    82. }

    83. query.addBindValue(idlist);

    84. query.addBindValue(MACAddrlsit);

    85. query.addBindValue(produceTimelist);

    86.  
    87. if (!query.execBatch())

    88. {

    89. qDebug() << query.lastError();

    90. }

    91. }

    92.  
    93.  
    94. //刪除一條數據

    95. void SqliteDBAOperator::deletedata()

    96. {

    97. //比較簡單,自行補充

    98. }

    99. //修改

    100. void SqliteDBAOperator::updatedata()

    101. {

    102. //比較簡單,自行補充

    103.  
    104. }

    105.  
    106.  
    107. void SqliteDBAOperator::closeDb(void)

    108. {

    109. db.close();

    110. }

    這部分可能稍微有點意思的就是帶參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

    QT實現對sqlite數據庫的操作

    先看下效果圖:
    該程序對數據庫的操作包括4個字段:ID、Name、Addr、Nick  (注意第一個字段必須是整數)
    query、insert、delete按鈕分別表示查詢、插入、刪除功能
     
    查詢按鈕的實現:
    void database::on_QueryButton_clicked()
    {
        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();
    }
    插入按鈕的實現:
    void database::on_InsertButton_clicked()
    {
        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();
    }
     
    刪除按鈕的實現:
    void database::on_DeleteButton_clicked()
    {
        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();
    }
     

     

    版權聲明:本文為u011555996原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/u011555996/article/details/108065618

    智能推薦

    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...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡