日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Qt下Sqlite数据库操作

發布時間:2023/12/18 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt下Sqlite数据库操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?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

    QT實現對sqlite數據庫的操作

    先看下效果圖: http://blog.chinaunix.net/photo/116111_101004185238.jpg 該程序對數據庫的操作包括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();
    }

    ?

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Qt下Sqlite数据库操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。