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

歡迎訪問 生活随笔!

生活随笔

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

数据库

QT5的数据库

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

?#include <QtSql>
QT += sql
QSqlDatabase類實現了數據庫連接的操作
QSqlQuery類執行SQL語句
QSqlRecord類封裝數據庫所有記錄

QSqlDatabase類

[cpp]?view plaincopy print?
  • QSqlDatabase?db?=?QSqlDatabase::addDatabase("QOCI");??
  • db.setHostName("localhost");????//數據庫主機名???
  • db.setDatabaseName("scott");????//數據庫名???
  • db.setUserName("stott");????????//數據庫用戶名???
  • db.setPassword("tiger");????????//數據庫密碼???
  • db.open();??????????//打開數據庫連接??
  • db.close();?????????//釋放數據庫連接??
  • 建立數據庫文件

    [cpp]?view plaincopy print?
  • QSqlDatabase?db?=?QSqlDatabase::addDatabase("QSQLITE");??
  • db.setDatabaseName("database.db");??
  • if?(!db.open())???
  • {??
  • ????qDebug("數據庫不能打開");??
  • }??
  • return?false;??
  • [cpp]?view plaincopy print?
  • 建立數據庫文件后創建表并插入兩條數據??
  • [cpp]?view plaincopy print?
  • QSqlQuery?query;??
  • query.exec("create?table?student(id?INTEGER?PRIMARY?KEY?autoincrement,??
  • ????????????name?nvarchar(20),?age?int)");?//id自動增加??
  • query.exec("insert?into?student?values(1,'小明',?14)");??
  • query.exec("insert?into?student?values(2,'小王',15)");??

  • QSqlQuery類

    插入值到數據庫操作

    一、直接用SQL語句插入(參照上面)

    二、利用預處理方式插入(ORACLE語法和ODBC語法)

    適合插入多條記錄,或者避免將值轉換成字符串(即正確地轉義),調用prepare()函數指定一個包含占位符的query,然后綁定要插入的值

    ORACLE語法

    [cpp]?view plaincopy print?
  • QSqlQuery?query;???
  • query.prepare("INSERT?INTO?T_STUDENT?(name,?age)?VALUES?(:name,?:age)");?//準備執行SQL查詢??
  • query.bindValue(":name",?"小王");???//在綁定要插入的值??
  • query.bindValue(":age",?11);???
  • query.exec();??

  • ODBC語法

    [cpp]?view plaincopy print?
  • QSqlQuery?query;??
  • query.prepare("INSERT?INTO?T_STUDENT?(name,age)?VALUES?(?,?)");?//準備執行SQL查詢??
  • query.addBindValue("小王");???//在綁定要插入的值??
  • query.bindValue(11);??
  • query.exec();??
  • 三、批量插入到數據庫中

    [cpp]?view plaincopy print?
  • QSqlQuery?query;??
  • query.prepare(“insert?into?student?values?(?,??)”);??
  • QVariantList?names;??
  • names?<<?"小王"?<<?"小明"?<<?"小張"?<<?"小新";?//?如果要提交空串,用QVariant(QVariant::String)代替名字??
  • query.addBindValue(names);??
  • QVariantList?ages;??
  • ages?<<?11?<<?13?<<?12?<<?11;??
  • query.addBindValue(ages);??
  • if?(!q.execBatch())?//進行批處理,如果出錯就輸出錯誤??
  • ????qDebug()?<<?q.lastError();??

  • 查詢數據庫操作

    [cpp]?view plaincopy print?
  • QSqlQuery?query;??
  • query.exec("SELECT?*?FROM?t_STUDENT");?//?查詢的結果可能不止一條記錄,所以我們稱之為結果集??
  • while?(query.next())??
  • {??
  • ????QString?name?=?query.value(0).toString();?//取第i條記錄第1個字段(從0開始計數)的結果??
  • ????int?age?=?query.value(0).toInt();?//取第i條記錄第2個字段的結果??
  • ????//?...?處理name,age變量數據???
  • }??

  • seek(int n) :query指向結果集的第n條記錄。指定當前的位置

    first() :query指向結果集的第一條記錄。

    last() :query指向結果集的最后一條記錄。

    next() :query指向下一條記錄,每執行一次該函數,便指向相鄰的下一條記錄。

    previous() :query指向上一條記錄,每執行一次該函數,便指向相鄰的上一條記錄。

    record() :獲得現在指向的記錄。

    value(int n) :獲得屬性的值。其中n表示你查詢的第n個屬性

    int rowNum = query.at(); //獲取query所指向的記錄在結果集中的編號

    int fieldNo = query.record().indexOf(“name”); //返回"name"的列號

    int columnNum = query.record().count();?//獲取每條記錄中屬性(即列)的個數

    ?

    事務操作

    操作函數:transaction(),commit()提交,rollback()回滾
    操作事務前,先判斷該數據庫是否支持事務操作。hasFeature是QSQLDriver類函數

    [cpp]?view plaincopy print?
  • if?(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){?...?}?//???
  • ?插入一條記錄,然后提交事務

    [cpp]?view plaincopy print?
  • QSqlDatabase::database().transaction();??
  • QSqlQuery?query;??
  • query.exec("SELECT?id?FROM?T_STUDENT?WHERE?class=1");??
  • if?(query.next())??
  • {??
  • ????query.exec("INSERT?INTO?T_STUDENT?(id,name,age)?VALUES?(3,'小李',13)");??
  • }??
  • QSqlDatabase::database().commit();??

  • ?

    總結

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

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