<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      軟件設計開發筆記4:QT操作SQLite數據庫

      ??有時候我們需要在軟件中記錄一些歷史數據以便于對數據的查詢。而我們希望軟件不能太復雜,體量也不要太大,這個時候就需要如SQLite這樣輕量級的數據庫。這篇中我們就來討論如何在使用QT開發應用是操作SQLite數據庫。

      0、概述

      ??SQLite是一款開源、輕量級、跨平臺的數據庫,無需Server,無需安裝和管理配置。它的設計目標是嵌入式的,所以很適合小型應用,也是Qt應用開發種常用的一種數據庫。
      ??我們先設計一個簡單的操作界面,最上面一行是六個操作按鈕,分別實現數據庫的連接、表格創建、數據查詢,插入數據、修改數據以及刪除數據。中間文紙是兩個輸入框,分別是輸入姓名和年齡。最下面是一個圖標顯示。具體形式如下:

      ??在開發之前,如果我們使用QtCreator則需要在*.pro中引入sql模塊(QT+=sql),如果是VS中在Qt VS Tool里勾選上sql模塊,就可以使用該模塊的接口了。

      1、連接數據庫

      ??QSqlDatabase類提供了一個接口,用于通過連接訪問數據。SQLite在單個文件上運行,在打開連接時必須將其設置為數據庫名稱。如果該文件不存在,SQLite將嘗試創建它。
      ??我們實現一個連接數據庫的函數,并在“連接數據庫”按鈕的槽函數中調用它來實現數據庫的連接。具體的代碼如下:

      void MainWindow::ConnectDatabase()
      {
          if(QSqlDatabase::contains("qt_sql_default_connection"))
          {
              db = QSqlDatabase::database("qt_sql_default_connection");\
          }
          else
          {
              db = QSqlDatabase::addDatabase("QSQLITE");
          }
      
          db.setDatabaseName("DBTest.db");
      }
      

      ??在上述代碼中,我們連接一個名稱為“DBTest.db”的數據庫,但這個數據庫一開始是沒有的,所以運行這段代碼后會創建一個名為“DBTest.db”的數據庫。運行完成后我們使用SQLiteStudio查看,發現已經創建了一個名為“DBTest.db”的數據庫,并可一連接上。如下圖:

      2、創建數據表

      ??接下來,我們創建一個數據表。其中QSqlQuery類可以使用SQL語句來實現與數據庫交互。所以在這里我們使用該類操作SQL語句穿件一個數據表。在這里我們創建一個名為staff的表格,該表中包括3個字段:id字段作為主鍵并自動增長;name字段和age字段用于存儲信息。具體代碼如下:

      void MainWindow::CreateTable()
      {
          const QString sql="CREATE TABLE IF NOT EXISTS staff (id   INTEGER   PRIMARY KEY AUTOINCREMENT NOT NULL,name CHAR (50) UNIQUE NOT NULL,age  INTEGER)";
      
          //QSqlQuery構造前,需要db已打開并連接
          //未指定db或者db無效時使用默認連接進行操作
          QSqlQuery query;
      
          if(query.exec(sql))
          {
              qDebug()<<"init table success";
          }
          else
          {
              //打印sql語句錯誤信息
              qDebug()<<"init table error";
          }
      }
      

      ??運行完成創建表格命令后,我們使用SQLiteStudio查看數據的內容。連接數據庫可以看到staff表格以及包含的3個字段,說明創建成功,具體如下圖:

      ??關于QSqlQuery類,他是封裝在QSqlDatabase上,用以執行SQL查詢中創建,導航和檢索數據所涉及的功能。它可以被用來執行DML(數據操縱語言)語句,例如select、insert、update、delete,以及DDL(數據定義語言)語句,如create table。在后續的增、刪、改、查等操作中也是使用該類。

      3、添加數據

      ??我們已經創建了表格,接下來我們嘗試向表格中添加數據。在這里我們使用QSqlQuery類中的prepare()方法來預設SQL語句,然后再通過bindValue()方法加入數據。具體實現代碼如下:

      void MainWindow::InsertData()
      {
          QSqlQuery query;
          query.prepare("INSERT INTO staff (name,age) VALUES (:name,:age)");
          query.bindValue(":name", ui->lineEditName->text());
          query.bindValue(":age", ui->lineEditAge->text());
          query.exec();
      }
      

      ??我們在操作界面中添加3條記錄,分別在姓名框和年齡框中輸入名字和年齡點擊“插入數據”按鈕實現對數據的插入。完成后顯示如下:

      4、修改數據

      ??接下來我們嘗試對表中的數據進行修改。我們依然使用QSqlQuery類中的prepare()方法來預設SQL語句,然后再通過bindValue()方法加入數據。具體實現代碼如下:

      void MainWindow::UpdateData()
      {
          QSqlQuery query;
      
          query.prepare("UPDATE staff SET age=:age WHERE name=:name");
          query.bindValue(":name",ui->lineEditName->text());//通過自定義的別名來替代
          query.bindValue(":age",ui->lineEditAge->text());
          query.exec();
      }
      

      ??在這里我們嘗試將第條記錄修改一下,我們在姓名框中輸入“Rose”,在年齡框中輸入“31”,將Rose的年齡有28修改為31。輸入完成點擊“修改數據”按鈕,結果如下:

      5、刪除數據

      ??接下來我們嘗試刪除數據。我們依然使用QSqlQuery類中的prepare()方法來預設SQL語句,然后再通過bindValue()方法加入數據。我們實現根據姓名來刪除數據,具體實現代碼如下:

      void MainWindow::DeleteData()
      {
          QSqlQuery query;
          query.prepare("DELETE FROM staff WHERE name=?");
          query.addBindValue(ui->lineEditName->text());
          query.exec();
      }
      

      ??我們刪除第3條數據,我們在姓名框中輸入“Rose”,然后點擊“刪除數據”按鈕,得到結果如下:

      6、查詢數據

      ??最后我們來實現數據的查詢問題。依然是使用QSqlQuery類,我們在這里使用查詢表格全部內容的方式。具體的實現代碼如下:

      void MainWindow::QueryData()
      {
          ui->tableWidget->clear();
          QStringList header;
          header<<"id"<<"name"<<"age";
          ui->tableWidget->setHorizontalHeaderLabels(header);
      
          int i=0;
      
          QSqlQuery query("SELECT * FROM staff");
          while (query.next())
          {
              ui->tableWidget->setItem(i,0,new QTableWidgetItem(query.value(0).toString()));
              ui->tableWidget->setItem(i,1,new QTableWidgetItem(query.value(1).toString()));
              ui->tableWidget->setItem(i,2,new QTableWidgetItem(query.value(2).toString()));
              i++;
          }
      }
      

      ??我們現在刪除后的表格中添加2條數據。分別是姓名“Rose”年齡“33”和姓名“Jake”年齡“45”兩條數據。然后重新連接數據庫并點擊“查詢數據”按鈕,得到如下結果:

      ??同時我們也可以使用SQLiteStudio直接產看數據庫的內容,具體如下:

      ??兩種方式查詢到的結果是一樣的,說明我們的操作是正確的。

      7、小結

      ??在這一篇中我們嘗試了使用QT操作SQLite數據庫,增、刪、改、查以及創建等都可很好的實現。

      歡迎關注:

      posted @ 2023-09-09 20:44  Moonan  閱讀(364)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 浮妇高潮喷白浆视频| 最新精品露脸国产在线| 无码乱人伦一区二区亚洲| 大陆精大陆国产国语精品| 欧美成人黄在线观看| 综合成人亚洲网友偷自拍| 熟女人妻aⅴ一区二区三区电影 | 亚洲国产一区二区三区久| 无套内射视频囯产| 惠安县| 国产成人精品久久性色av| 99久久久无码国产精品免费| 男人的天堂av一二三区| 精品无码久久久久久尤物| 欧美亚洲国产精品久久| 亚洲另类激情专区小说图片| 免费大片黄国产在线观看| 国产不卡免费一区二区| 国产亚洲综合另类色专区| 成人午夜电影福利免费| 性欧美VIDEOFREE高清大喷水| 亚洲岛国av一区二区| 欧美日韩一线| 动漫精品中文无码卡通动漫| 亚洲人妻一区二区精品| 免费的很黄很污的视频| 亚洲av二区三区在线| 亚洲色大成网站WWW永久麻豆| 一区二区三区不卡国产| 色吊丝一区二区中文字幕| 91一区二区三区蜜桃臀| 黄色亚洲一区二区在线观看| 国产一区二区午夜福利久久| 国产精品一区二区三区自拍| 亚洲一二三区精品美妇| 国产对白叫床清晰在线播放| 久9re热视频这里只有精品免费| 亚洲人成网站18禁止无码| 无码国产偷倩在线播放老年人 | 五月婷婷深开心五月天| 妺妺窝人体色www聚色窝仙踪|