QT筆記 資料庫總結 一

2021-06-01 23:04:22 字數 3206 閱讀 5466

#include

qt += sql

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

qsqlquery類執行sql語句

qsqlrecord類封裝資料庫所有記錄

qsqldatabase類

qsqldatabase db = qsqldatabase::adddatabase("qoci");

db.sethostname("localhost"); //資料庫主機名

db.setdatabasename("scott"); //資料庫名

db.setusername("stott"); //資料庫使用者名稱

db.setpassword("tiger"); //資料庫密碼

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

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

建立資料庫檔案

qsqldatabase db = qsqldatabase::adddatabase("qsqlite");

db.setdatabasename("database.db");

if (!db.open())

return false;

建立資料庫檔案後建立表並插入兩條資料
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語法

qsqlquery query; 

query.prepare("insert into t_student (name, age) values (:name, :age)"); //準備執行sql查詢

query.bindvalue(":name", "小王"); //在繫結要插入的值

query.bindvalue(":age", 11);

query.exec();

odbc語法

qsqlquery query;

query.prepare("insert into t_student (name,age) values (?,?)"); //準備執行sql查詢

query.addbindvalue("小王"); //在繫結要插入的值

query.bindvalue(11);

query.exec();

三、批量插入到資料庫中

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();

查詢資料庫操作

qsqlquery query;

query.exec("select * from t_student"); // 查詢的結果可能不止一條記錄,所以我們稱之為結果集

while (query.next())

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

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

last() :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類函式

if (qsqldatabase::database().driver()->hasfeature(qsqldriver::transactions)) //
插入一條記錄,然後提交事務

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類 cpp view plain copy print qsqldatabase db qsqldatabase ad...

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...