日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Qt下Sqlite数据库操作

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

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

一、sql語句和部分接口函數(shù)

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

QT += core gui sql ?

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

  • #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:

  • //創(chuàng)建數(shù)據(jù)庫并建立連接

  • bool OpenDb(void);

  • //創(chuàng)建數(shù)據(jù)表(student)

  • void createTable(void);

  • //在表格中增加新的字段

  • void addNewcolumn(QString &columnNameAndproperty);

  • //查詢和顯示結(jié)果

  • void queryTable(QString& str);

  • //判斷數(shù)據(jù)表是否存在

  • bool IsTaBexists(QString& Tabname);

  • //插入數(shù)據(jù)

  • void singleinsertdata(w2dba &singledb);//插入單條數(shù)據(jù)

  • void Moreinsertdata(QList<w2dba> &moredb);//插入多條數(shù)據(jù)

  • //刪除數(shù)據(jù)

  • void deletedata();

  • //修改數(shù)據(jù)

  • void updatedata();

  • //關閉數(shù)據(jù)庫

  • void closeDb(void);

  • private:

  • QSqlDatabase db;//用于建立和數(shù)據(jù)庫的連接

  • };

  • ?
  • #endif // SQLITEDBAOPERATOR_H

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

    ?

  • /*Sqlite數(shù)據(jù)庫操作*/

  • ?
  • #include "sqlitedbaoperator.h"

  • #include"generalheaders.h"

  • /*構(gòu)造函數(shù)中初始化數(shù)據(jù)庫對象,并創(chuàng)建連接*/
  • SqliteDBAOperator::SqliteDBAOperator()

  • {

  • QSqlDatabase database;

  • if (QSqlDatabase::contains("qt_sql_default_connection"))

  • {

  • database = QSqlDatabase::database("qt_sql_default_connection");

  • }

  • else

  • {

  • //建立和sqlite數(shù)據(jù)的連接

  • db = QSqlDatabase::addDatabase("QSQLITE");

  • //設置數(shù)據(jù)庫文件的名字

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

  • db.setDatabaseName(dbname);

  • }

  • }

  • ?
  • /*析構(gòu)函數(shù)關閉數(shù)據(jù)庫連接*/

  • SqliteDBAOperator::~SqliteDBAOperator()

  • {

  • db.close();

  • }

  • ?
  • //打開數(shù)據(jù)庫

  • bool SqliteDBAOperator::OpenDb(void)

  • {

  • //打開數(shù)據(jù)庫

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

  • qDebug() << "連接數(shù)據(jù)失敗!";

  • return false;

  • }

  • qDebug() << "連接數(shù)據(jù)庫成功";

  • return true;

  • }

  • ?
  • //判斷數(shù)據(jù)庫中某個數(shù)據(jù)表是否存在

  • bool SqliteDBAOperator::IsTaBexists(QString& Tabname)

  • {

  • QSqlDatabase db = QSqlDatabase::database();

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

  • {

  • return true;

  • }

  • return false;

  • }

  • ?
  • ?
  • //創(chuàng)建數(shù)據(jù)表

  • void SqliteDBAOperator::createTable(void)

  • {

  • //用于執(zhí)行sql語句的對象

  • QSqlQuery query;

  • //構(gòu)建創(chuàng)建數(shù)據(jù)庫的sql語句字符串

  • QString str = QString("CREATE TABLE MACAddrs (\

  • ID INT PRIMARY KEY NOT NULL,\

  • Type TEXT NOT NULL,\

  • ProduceTime TEXT NOT NULL)");

  • //執(zhí)行sql語句

  • query.exec(str);

  • }

  • ?
  • void SqliteDBAOperator::addNewcolumn(QString& columnNameAndproperty)

  • {

  • }

  • ?
  • //查詢和顯示結(jié)果

  • void SqliteDBAOperator::queryTable(QString& str)

  • {

  • QSqlQuery query;

  • //構(gòu)建創(chuàng)建數(shù)據(jù)庫的sql語句字符串

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

  • //執(zhí)行sql語句,并將結(jié)果集保存到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();

  • }

  • }

  • ?
  • ?
  • //刪除一條數(shù)據(jù)

  • void SqliteDBAOperator::deletedata()

  • {

  • //比較簡單,自行補充

  • }

  • //修改

  • void SqliteDBAOperator::updatedata()

  • {

  • //比較簡單,自行補充

  • ?
  • }

  • ?
  • ?
  • void SqliteDBAOperator::closeDb(void)

  • {

  • db.close();

  • }

  • 這部分可能稍微有點意思的就是帶參SQL語句的編寫,在數(shù)據(jù)的單條插入和多條插入中,使用了兩種不同的方法,各位可以自行查看。

    ?

    二、接口函數(shù)的檢測

    1、windows下sqlite數(shù)據(jù)庫的安裝:

    ? ?(1) 前往www.sqlite.org.com下載相應的數(shù)據(jù)庫文件,然后在創(chuàng)建路徑并在 c:\sqilte3 路徑下將文件解壓(路徑可自己定義);

    (2)設置環(huán)境變量,將數(shù)據(jù)庫路的路徑增加到PATH變量下。

    ?

    (3)環(huán)境配置完成,重啟電腦,配置生效。

    (4)數(shù)據(jù)庫操作

    ? ? 1>創(chuàng)建或打開數(shù)據(jù)庫

    通過cd 命令到.db數(shù)據(jù)庫文件所在的目錄下,如果沒有文件自己創(chuàng)建一個。

    這里在C盤的根目錄下創(chuàng)建一個test.db的數(shù)據(jù)庫文件

    敲擊回車后進入sqlite數(shù)據(jù)庫,顯示如下:

    (2)前面簡單的數(shù)據(jù)庫基本配置工作已經(jīng)完成,現(xiàn)在開始數(shù)據(jù)庫的操作部分

    首先,我們要創(chuàng)建一張數(shù)據(jù)表:

    sql語句:

    ?

    CREATE TABLE MACAddrs ( ID INT PRIMARY KEY NOT NULL,Type TEXT NOT NULL,ProduceTime TEXT );

    ?

    查看表格是否創(chuàng)建成功 以及表頭內(nèi)容:

    .tables

    .schema

    QT實現(xiàn)對sqlite數(shù)據(jù)庫的操作

    先看下效果圖: http://blog.chinaunix.net/photo/116111_101004185238.jpg 該程序?qū)?shù)據(jù)庫的操作包括4個字段:ID、Name、Addr、Nick? (注意第一個字段必須是整數(shù)) query、insert、delete按鈕分別表示查詢、插入、刪除功能 ? 查詢按鈕的實現(xiàn): 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();
    }
    插入按鈕的實現(xiàn): 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();
    }
    ? 刪除按鈕的實現(xiàn): 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();
    }

    ?

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。