QT筆記 資料庫總結 一

2021-07-10 01:37:26 字數 4179 閱讀 6347

#include

qt += sql

qsqldatabase類實現了資料庫連線的操作

qsqlquery類執行sql語句

qsqlrecord類封裝資料庫所有記錄

qsqldatabase類

[cpp]view plain

copy

print

? qsqldatabase db = qsqldatabase::adddatabase(

"qoci"

);  

db.sethostname("localhost"

);    

//資料庫主機名 

db.setdatabasename("scott"

);    

//資料庫名 

db.setusername("stott"

);        

//資料庫使用者名稱 

db.setpassword("tiger"

);        

//資料庫密碼 

db.open();          //開啟資料庫連線

db.close();         //釋放資料庫連線

建立資料庫檔案

[cpp]view plain

copy

print

? qsqldatabase db = qsqldatabase::adddatabase(

"qsqlite"

);  

db.setdatabasename("database.db"

);  

if(!db.open())   

return

false

;  

[cpp]view plain

copy

print

? 建立資料庫檔案後建立表並插入兩條資料  

[cpp]view plain

copy

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 plain

copy

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 plain

copy

print

? qsqlquery query;  

query.prepare("insert into t_student (name,age) values (?,?)"

); //準備執行sql查詢

query.addbindvalue("小王"

);   

//在繫結要插入的值

query.bindvalue(11);  

query.exec();  

三、批量插入到資料庫中

[cpp]view plain

copy

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 plain

copy

print

? qsqlquery query;  

query.exec("select * from t_student"

); // 查詢的結果可能不止一條記錄,所以我們稱之為結果集

while

(query.next())    

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 plain

copy

print

? if(qsqldatabase::database().driver()->hasfeature(qsqldriver::transactions)) 

// 

插入一條記錄,然後提交事務

[cpp]view plain

copy

print

? qsqldatabase::database().transaction();  

qsqlquery query;  

query.exec("select id from t_student where class=1"

);  

if(query.next())  

qsqldatabase::database().commit(); 

QT筆記 資料庫總結 一

include qt sql qsqldatabase類實現了資料庫連線的操作 qsqlquery類執行sql語句 qsqlrecord類封裝資料庫所有記錄 qsqldatabase類 qsqldatabase db qsqldatabase adddatabase qoci db.sethostn...

QT筆記 資料庫總結 一

include qt sql qsqldatabase類實現了資料庫連線的操作 qsqlquery類執行sql語句 qsqlrecord類封裝資料庫所有記錄 qsqldatabase類 qsqldatabase db qsqldatabase adddatabase qoci db.sethostn...

資料庫筆記(資料庫操作)

1.windows系統下 資料庫啟動 net start mysql2.連線與斷開伺服器 mysql h 位址 p 埠 u 使用者名稱 p 密碼3.檢視當前資料庫 select database 4.顯示當前時間,使用者名稱,資料庫版本 select now user version 5.建立庫 1...