#include
qt += sql
qsqldatabase類實現了資料庫連線的操作
qsqlquery類執行sql語句
qsqlrecord類封裝資料庫所有記錄
qsqldatabase類
[cpp]view plain
copy
? 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
? qsqldatabase db = qsqldatabase::adddatabase(
"qsqlite"
);
db.setdatabasename("database.db"
);
if(!db.open())
return
false
;
[cpp]view plain
copy
? 建立資料庫檔案後建立表並插入兩條資料
[cpp]view plain
copy
? 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
? 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
? qsqlquery query;
query.prepare("insert into t_student (name,age) values (?,?)"
); //準備執行sql查詢
query.addbindvalue("小王"
);
//在繫結要插入的值
query.bindvalue(11);
query.exec();
三、批量插入到資料庫中
[cpp]view plain
copy
? 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
? 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
? if(qsqldatabase::database().driver()->hasfeature(qsqldriver::transactions))
//
插入一條記錄,然後提交事務
[cpp]view plain
copy
? 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...