91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)Linux主板Qt數(shù)據(jù)庫(kù)應(yīng)用程序簡(jiǎn)介

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-01-17 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SQLite是一個(gè)開源的嵌入式數(shù)據(jù)庫(kù),其特點(diǎn)是零配置,可移植性好,小巧、高效而且可靠。同時(shí)SQLite的數(shù)據(jù)庫(kù)權(quán)限只依賴于文件系統(tǒng),沒有用戶帳戶的概念,因此使用起來很方便。英創(chuàng)Linux主板能夠很好的支持SQLite,相關(guān)的測(cè)試?yán)桃呀?jīng)在光盤中提供,本文主要簡(jiǎn)介Qt中的數(shù)據(jù)庫(kù)開發(fā)。

Qt中的QtSql模塊提供了對(duì)數(shù)據(jù)庫(kù)的支持,該模塊中的眾多類基本上可以分為三層:用戶接口層、SQL接口層,驅(qū)動(dòng)層。

其中驅(qū)動(dòng)層為具體的數(shù)據(jù)庫(kù)和SQL接口層之間提供了底層的橋梁;SQL接口層提供了對(duì)數(shù)據(jù)庫(kù)的訪問;用戶接口層的幾個(gè)類實(shí)現(xiàn)了將數(shù)據(jù)庫(kù)中的數(shù)據(jù)鏈接到窗口部件上,這些類是使用前一章的模型/視圖框架實(shí)現(xiàn)的,它們是更高層次的抽象,即便不熟悉SQL也可以操作數(shù)據(jù)庫(kù)。如果要使用QtQql模塊中的這些類,需要在項(xiàng)目文件(.pro文件)中添加QT += sql這一行代碼。

QtSql模塊使用數(shù)據(jù)庫(kù)驅(qū)動(dòng)來和不同的數(shù)據(jù)庫(kù)接口進(jìn)行通信。由于Qt的SQL模型的接口是獨(dú)立于數(shù)據(jù)庫(kù)的,所以所有數(shù)據(jù)庫(kù)特定的代碼都包含在了這些驅(qū)動(dòng)中。我們使用的免費(fèi)的Qt只提供了SQLite和ODBC數(shù)據(jù)庫(kù)的驅(qū)動(dòng)。創(chuàng)建數(shù)據(jù)庫(kù)連接:

QSqlDatabase db = QSqlDatabase::addDatabase('QSQLITE'); //指定驅(qū)動(dòng)
db.setDatabaseName('/mnt/nandflash/my.db'); //指定路徑

使用open()函數(shù)將數(shù)據(jù)庫(kù)打開,如果打開失敗,則彈出對(duì)話提示框:
if (!db.open())
{
QMessageBox::critical(0, qApp->tr('Cannot open database'),
qApp->tr('Unable to establisha database connection.'
), QMessageBox::Cancel);
return false;
}

使用QSqlQuery創(chuàng)建了一個(gè)product表,并插入id,name和speed三個(gè)字段的三條記錄。其中,id字段是int類型的,''primary key ''表明該字段是主鍵,它不能為空,而且不能有重復(fù)的值;而name字段是varchar類型的,Speed字段也是varchar類型的,注意這里使用的SQL語(yǔ)句都要包含在雙引號(hào)中,如果一行寫不完,那么分行后,每一行都要使用兩個(gè)雙引號(hào)引起來:

QSqlQuery query;
// 創(chuàng)建product表
query.exec(QString ('create table product (id int primary key, '
'name varchar, Speed varchar)'));
query.exec(QString ('insert into product values(1, 'EM335x', '1GHZ')'));
query.exec(QString ('insert into product values(2, 'EM3352', '600MHZ')'));
query.exec(QString ('insert intoproduct values(3, 'EM9280', '454MHZ')'));

SQL表格模型提供了一個(gè)一次只能操作一個(gè)SQL表的讀/寫模型QSqlTableModel,它可以瀏覽和修改獨(dú)立的SQL表,并且只需編寫很少的代碼,而且不需要了解SQL語(yǔ)法。該模型默認(rèn)是可讀可寫的。我們首先創(chuàng)建一個(gè)QSqlTableModel,只須使用setTable()來為其指定數(shù)據(jù)庫(kù)表,然后使用select()函數(shù)進(jìn)行查詢:

model = new QSqlTableModel(this);
model->setTable('product');
model->select();
// 設(shè)置編輯策略
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(model);

在使用該模型前,一般還要設(shè)置其編輯策略,它由QsqlTableModel::EditStrategy枚舉變量定義,一共有三個(gè)值:
QsqlTableModel::OnFieldChange:所有對(duì)模型的改變都會(huì)立即應(yīng)用到數(shù)據(jù)庫(kù)。
QsqlTableModel::OnRowChange:對(duì)一條記錄的改變會(huì)在用戶選擇另一條記錄時(shí)被應(yīng)用。
QsqlTableModel::OnManualSubmit:所有的改變都會(huì)在模型中進(jìn)行緩存,知道調(diào)用submitAll()或者revertAll()函數(shù)。

下面添加一些功能按鈕,逐個(gè)實(shí)現(xiàn)他們:

// 提交修改按鈕
void MainWindow::on_pushButton_clicked()
{
// 開始事務(wù)操作
model->database().transaction();
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滾
QMessageBox::warning(this, tr('tableModel'),
tr('數(shù)據(jù)庫(kù)錯(cuò)誤: %1').arg(model->lastError().text()));
}
}

如果可以使用submitAll()將模型中的修改向數(shù)據(jù)庫(kù)提交成功,那么執(zhí)行commit(),否則進(jìn)行回滾rollback(),并提示錯(cuò)誤信息,下面是撤銷修改按鈕:

// 撤銷修改按鈕
void MainWindow::on_pushButton_2_clicked()
{
model->revertAll();
}

這里使用了setFilter()函數(shù)來進(jìn)行數(shù)據(jù)篩選,采用id來篩選:

// 查詢按鈕,進(jìn)行篩選
void MainWindow::on_pushButton_7_clicked()
{
QString id = ui->comboBox->currentText();
//根據(jù)id進(jìn)行篩選,一定要使用單引號(hào)
model->setFilter(QString('id = '%1'').arg(id));
model->select();
}

使用setTable()來指定數(shù)據(jù)庫(kù)表,然后使用select()函數(shù)進(jìn)行查詢:
// 顯示全表按鈕
void MainWindow::on_pushButton_8_clicked()
{
model->setTable('product');
model->select();
}

// 按id升序排列按鈕
void MainWindow::on_pushButton_5_clicked()
{
//id屬性,即第0列,升序排列
model->setSort(0, Qt::AscendingOrder);
model->select();
}

// 按id降序排列按鈕
void MainWindow::on_pushButton_6_clicked()
{
model->setSort(0, Qt::DescendingOrder);
model->select();
}

// 刪除選中行按鈕
void MainWindow::on_pushButton_4_clicked()
{
// 獲取選中的行
int curRow = ui->tableView->currentIndex().row();
// 刪除該行
model->removeRow(curRow);
int ok = QMessageBox::warning(this,tr('刪除當(dāng)前行!'),
tr('你確定刪除當(dāng)前行嗎?'), QMessageBox::No,QMessageBox::Yes);
if(ok == QMessageBox::No)
{ // 如果不刪除,則撤銷
model->revertAll();
} else { // 否則提交,在數(shù)據(jù)庫(kù)中刪除該行
model->submitAll();
}
}

// 添加記錄按鈕
void MainWindow::on_pushButton_3_clicked()
{
// 獲得表的行數(shù)
int rowNum = model->rowCount();
int id = rowNum + 1 ;
// 添加一行
model->insertRow(rowNum);
model->setData(model->index(rowNum,0), id);
// 可以直接提交
//model->submitAll();
}

運(yùn)行效果:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11758

    瀏覽量

    219009
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6107

    瀏覽量

    37071
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    恒訊科技解析:如何安裝MySQL并創(chuàng)建數(shù)據(jù)庫(kù)

    安裝和管理MySQL不必復(fù)雜。只需幾分鐘,你就能在Linux服務(wù)器上搭建MySQL,創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù),甚至自動(dòng)化備份——同時(shí)確保數(shù)據(jù)安全有序。 什么是 MySQL? MySQL 是一個(gè)關(guān)系型數(shù)
    的頭像 發(fā)表于 01-14 14:25 ?175次閱讀

    mysql數(shù)據(jù)恢復(fù)—mysql數(shù)據(jù)庫(kù)表被truncate的數(shù)據(jù)恢復(fù)案例

    某云ECS網(wǎng)站服務(wù)器,linux操作系統(tǒng),部署了mysql數(shù)據(jù)庫(kù)。工作人員在執(zhí)行數(shù)據(jù)庫(kù)版本更新測(cè)試時(shí),錯(cuò)誤地將本應(yīng)在測(cè)試庫(kù)執(zhí)行的sql腳本在生產(chǎn)庫(kù)
    的頭像 發(fā)表于 09-11 09:28 ?871次閱讀
    mysql<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—mysql<b class='flag-5'>數(shù)據(jù)庫(kù)</b>表被truncate的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle數(shù)據(jù)庫(kù)故障的數(shù)據(jù)恢復(fù)案例

    Oracle數(shù)據(jù)庫(kù)故障: 某公司一臺(tái)服務(wù)器上部署Oracle數(shù)據(jù)庫(kù)。服務(wù)器意外斷電導(dǎo)致數(shù)據(jù)庫(kù)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容為“system01.dbf需要更多的恢復(fù)來保持一致性”。該Oracle數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 07-24 11:12 ?637次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—服務(wù)器異常斷電導(dǎo)致Oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>故障的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    飛騰主板為信創(chuàng)產(chǎn)業(yè)發(fā)展提高硬實(shí)力

    信息技術(shù)飛速發(fā)展的當(dāng)下,信創(chuàng)產(chǎn)業(yè)已成為我國(guó)實(shí)現(xiàn)科技自立自強(qiáng)、保障國(guó)家信息安全的關(guān)鍵領(lǐng)域。信創(chuàng),即信息技術(shù)應(yīng)用創(chuàng)新,其核心目標(biāo)是實(shí)現(xiàn)
    的頭像 發(fā)表于 07-22 18:20 ?707次閱讀

    三款主流國(guó)產(chǎn)數(shù)據(jù)庫(kù)技術(shù)特點(diǎn)

    隨著數(shù)字經(jīng)濟(jì)的快速發(fā)展和數(shù)據(jù)安全要求的提升,國(guó)產(chǎn)數(shù)據(jù)庫(kù)正迎來前所未有的發(fā)展機(jī)遇。在信創(chuàng)浪潮推動(dòng)下,達(dá)夢(mèng)數(shù)據(jù)庫(kù)、TiDB、華為高斯數(shù)據(jù)庫(kù)等國(guó)產(chǎn)
    的頭像 發(fā)表于 07-14 11:08 ?1145次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫(kù)文件丟失的數(shù)據(jù)恢復(fù)案例

    MongoDB數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: 一臺(tái)操作系統(tǒng)為Windows Server的虛擬機(jī)上部署MongoDB數(shù)據(jù)庫(kù)。 MongoDB數(shù)據(jù)庫(kù)故障: 工作人員在MongoDB服務(wù)仍
    的頭像 發(fā)表于 07-01 11:13 ?638次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—MongoDB<b class='flag-5'>數(shù)據(jù)庫(kù)</b>文件丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server數(shù)據(jù)庫(kù)被加密,無(wú)法使用。 數(shù)據(jù)庫(kù)MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?672次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>被加密如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    科普|信創(chuàng)是什么?一文讀懂“信息技術(shù)應(yīng)用創(chuàng)新”戰(zhàn)略

    什么是信創(chuàng)?信創(chuàng),即“信息技術(shù)應(yīng)用創(chuàng)新”,是國(guó)家推動(dòng)IT系統(tǒng)自主可控、安全可控的重要戰(zhàn)略工程。它不僅是技術(shù)層面的創(chuàng)新,更承載著保障國(guó)家網(wǎng)絡(luò)安全、推動(dòng)產(chǎn)業(yè)升級(jí)和實(shí)現(xiàn)數(shù)字主權(quán)的重任。簡(jiǎn)單來
    的頭像 發(fā)表于 06-13 10:06 ?8214次閱讀
    科普|信<b class='flag-5'>創(chuàng)</b>是什么?一文讀懂“<b class='flag-5'>信息技術(shù)</b>應(yīng)用創(chuàng)新”戰(zhàn)略

    oracle數(shù)據(jù)恢復(fù)—oracle數(shù)據(jù)庫(kù)誤執(zhí)行錯(cuò)誤truncate命令如何恢復(fù)數(shù)據(jù)?

    oracle數(shù)據(jù)庫(kù)誤執(zhí)行truncate命令導(dǎo)致數(shù)據(jù)丟失是一種常見情況。通常情況下,oracle數(shù)據(jù)庫(kù)誤操作刪除數(shù)據(jù)只需要通過備份恢復(fù)數(shù)據(jù)
    的頭像 發(fā)表于 06-05 16:01 ?1060次閱讀
    oracle<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>誤執(zhí)行錯(cuò)誤truncate命令如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    SQLSERVER數(shù)據(jù)庫(kù)是什么

    支持在Linux和容器化環(huán)境中運(yùn)行。 核心特點(diǎn) 關(guān)系型數(shù)據(jù)庫(kù) 基于SQL(結(jié)構(gòu)化查詢語(yǔ)言)進(jìn)行數(shù)據(jù)操作,支持表、行、列等結(jié)構(gòu)化存儲(chǔ)。 提供ACID(原子性、一致性、隔離性、持久性)事務(wù)支持,確保
    的頭像 發(fā)表于 05-26 09:19 ?1168次閱讀

    MySQL數(shù)據(jù)庫(kù)是什么

    MySQL數(shù)據(jù)庫(kù)是一種 開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購(gòu)。它通過結(jié)構(gòu)化查詢語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)存儲(chǔ)、管理和操作,廣泛應(yīng)用于Web
    的頭像 發(fā)表于 05-23 09:18 ?1205次閱讀

    創(chuàng)浪潮下,國(guó)產(chǎn)主板有什么新的發(fā)展機(jī)遇?

    信息技術(shù)應(yīng)用創(chuàng)新浪潮的推動(dòng)下,國(guó)產(chǎn)主板迎來了諸多新的發(fā)展機(jī)遇。信創(chuàng)產(chǎn)業(yè)旨在實(shí)現(xiàn)信息技術(shù)領(lǐng)域的自主可控,這一戰(zhàn)略目標(biāo)為國(guó)產(chǎn)主板的發(fā)展提供了廣
    的頭像 發(fā)表于 05-09 09:24 ?721次閱讀
    信<b class='flag-5'>創(chuàng)</b>浪潮下,國(guó)產(chǎn)<b class='flag-5'>主板</b>有什么新的發(fā)展機(jī)遇?

    技術(shù)案例】Qt 環(huán)境部署 - Ubuntu 篇

    什么是Qt?Qt是一個(gè)跨平臺(tái)C++圖形用戶界面應(yīng)用程序開發(fā)框架,可構(gòu)建高性能的桌面、移動(dòng)及Web應(yīng)用程序,也可用于開發(fā)非GUI程序,比如控制
    的頭像 發(fā)表于 04-16 17:17 ?1927次閱讀
    【<b class='flag-5'>技術(shù)</b>案例】<b class='flag-5'>Qt</b> 環(huán)境部署 - Ubuntu 篇

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫(kù)文件拷貝后服務(wù)無(wú)法啟動(dòng)的數(shù)據(jù)恢復(fù)

    MongoDB數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: 一臺(tái)Windows Server操作系統(tǒng)虛擬機(jī)上部署MongoDB數(shù)據(jù)庫(kù)。 MongoDB數(shù)據(jù)庫(kù)故障: 管理員在未關(guān)閉MongoDB服務(wù)的
    的頭像 發(fā)表于 04-09 11:34 ?864次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)——MongoDB<b class='flag-5'>數(shù)據(jù)庫(kù)</b>文件拷貝后服務(wù)無(wú)法啟動(dòng)的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)

    Linux的作用

    Linux是做什么用的? 1、服務(wù)器操作系統(tǒng):Linux在服務(wù)器領(lǐng)域非常流行,因?yàn)樗€(wěn)定、安全且可靠。許多大型互聯(lián)網(wǎng)公司和數(shù)據(jù)中心都使用Linux作為服務(wù)器操作系統(tǒng),用于托管網(wǎng)站、
    發(fā)表于 04-04 01:57