生活随笔
收集整理的這篇文章主要介紹了
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)");??? 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)");??? 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?(?,?)");??? query.addBindValue("小王");????? query.bindValue(11);?? query.exec();??
三、批量插入到數據庫中
[cpp]?view plaincopy print?
QSqlQuery?query;?? query.prepare(“insert?into?student?values?(?,??)”);?? QVariantList?names;?? names?<<?"小王"?<<?"小明"?<<?"小張"?<<?"小新";??? 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();??? ????int?age?=?query.value(0).toInt();??? ?????? }??
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的数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。