在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

使用open()函數(shù)將數(shù)據(jù)庫打開,如果打開失敗,則彈出對話提示框:
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)建了一個product表,并插入id,name和speed三個字段的三條記錄。其中,id字段是int類型的,''primary key ''表明該字段是主鍵,它不能為空,而且不能有重復(fù)的值;而name字段是varchar類型的,Speed字段也是varchar類型的,注意這里使用的SQL語句都要包含在雙引號中,如果一行寫不完,那么分行后,每一行都要使用兩個雙引號引起來:

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表格模型提供了一個一次只能操作一個SQL表的讀/寫模型QSqlTableModel,它可以瀏覽和修改獨(dú)立的SQL表,并且只需編寫很少的代碼,而且不需要了解SQL語法。該模型默認(rèn)是可讀可寫的。我們首先創(chuàng)建一個QSqlTableModel,只須使用setTable()來為其指定數(shù)據(jù)庫表,然后使用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枚舉變量定義,一共有三個值:
QsqlTableModel::OnFieldChange:所有對模型的改變都會立即應(yīng)用到數(shù)據(jù)庫。
QsqlTableModel::OnRowChange:對一條記錄的改變會在用戶選擇另一條記錄時被應(yīng)用。
QsqlTableModel::OnManualSubmit:所有的改變都會在模型中進(jìn)行緩存,知道調(diào)用submitAll()或者revertAll()函數(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ù)庫錯誤: %1').arg(model->lastError().text()));
}
}

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

// 撤銷修改按鈕
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)行篩選,一定要使用單引號
model->setFilter(QString('id = '%1'').arg(id));
model->select();
}

使用setTable()來指定數(shù)據(jù)庫表,然后使用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ù)庫中刪除該行
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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11506

    瀏覽量

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

    關(guān)注

    7

    文章

    6100

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    Linux的作用

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

    適用于SQLite的dbExpress數(shù)據(jù)庫驅(qū)動程序

    Builder(包括社區(qū)版)對 SQLite 的快速訪問,在 Windows 和 macOS(32 位和 64 位)和 Linux(64 位)平臺。 對于此數(shù)據(jù)庫引擎,dbExpress 提供了一個
    的頭像 發(fā)表于 02-09 09:45 ?407次閱讀

    從Delphi、C++ Builder和Lazarus連接到MySQL數(shù)據(jù)庫

    平臺。 基于 MyDAC 的應(yīng)用程序可以直接連接到 MySQL 服務(wù)器或通過 MySQL 客戶端工作。MySQL 數(shù)據(jù)訪問組件旨在幫助程序員更快、更輕松地開發(fā) MySQL
    的頭像 發(fā)表于 01-20 13:47 ?685次閱讀
    從Delphi、C++ Builder和Lazarus連接到MySQL<b class='flag-5'>數(shù)據(jù)庫</b>

    適用于MySQL和MariaDB的Python連接器:可靠的MySQL數(shù)據(jù)連接器和數(shù)據(jù)庫

    Linux 的 wheel 包分發(fā)。 直接連接 該解決方案使您能夠通過 TCP/IP 建立與 MySQL 或者 MariaDB 數(shù)據(jù)庫服務(wù)器的直接連接,而無需數(shù)據(jù)庫客戶端。另外
    的頭像 發(fā)表于 01-17 12:18 ?473次閱讀
    適用于MySQL和MariaDB的Python連接器:可靠的MySQL<b class='flag-5'>數(shù)據(jù)</b>連接器和<b class='flag-5'>數(shù)據(jù)庫</b>

    從Delphi、C++ Builder和Lazarus連接到Oracle數(shù)據(jù)庫

    幫助程序員開發(fā)更快、更原生的 Oracle 數(shù)據(jù)庫應(yīng)用程序。 ODAC 是一種高性能且功能豐富的 Oracle 連接解決方案,是 Borland 數(shù)據(jù)庫引擎 (BDE) 和標(biāo)準(zhǔn) dbE
    的頭像 發(fā)表于 01-15 10:01 ?813次閱讀

    基于QT開發(fā)國產(chǎn)主板終端桌面程序 高效、穩(wěn)定、跨平臺的解決方案

    了開發(fā)者們面臨的一個重要挑戰(zhàn)。本文將介紹如何基于QT框架,開發(fā)適用于國產(chǎn)主板的終端桌面程序,并探討其優(yōu)勢和應(yīng)用場景。 QT是一個跨平臺的C++圖形用戶界面
    的頭像 發(fā)表于 01-08 15:34 ?822次閱讀

    數(shù)據(jù)庫是哪種數(shù)據(jù)庫類型?

    數(shù)據(jù)庫是一種部署在虛擬計算環(huán)境中的數(shù)據(jù)庫,它融合了云計算的彈性和可擴(kuò)展性,為用戶提供高效、靈活的數(shù)據(jù)庫服務(wù)。云數(shù)據(jù)庫主要分為兩大類:關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 01-07 10:22 ?491次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Mysql數(shù)據(jù)庫表記錄丟失的數(shù)據(jù)恢復(fù)流程

    Mysql數(shù)據(jù)庫故障: Mysql數(shù)據(jù)庫表記錄丟失。 Mysql數(shù)據(jù)庫故障表現(xiàn): 1、Mysql數(shù)據(jù)庫表中無任何數(shù)據(jù)或只有部分
    的頭像 發(fā)表于 12-16 11:05 ?584次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—Mysql<b class='flag-5'>數(shù)據(jù)庫</b>表記錄丟失的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)流程

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

    一個運(yùn)行在存儲上的SQLServer數(shù)據(jù)庫,有1000多個文件,大小幾十TB。數(shù)據(jù)庫每10天生成一個NDF文件,每個NDF幾百GB大小。數(shù)據(jù)庫包含兩個LDF文件。 存儲損壞,數(shù)據(jù)庫
    的頭像 發(fā)表于 10-31 13:21 ?679次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—通過拼接<b class='flag-5'>數(shù)據(jù)庫</b>碎片恢復(fù)SQLserver<b class='flag-5'>數(shù)據(jù)庫</b>

    有云服務(wù)器還需要租用數(shù)據(jù)庫嗎?

    如果你的應(yīng)用程序需要處理大量的數(shù)據(jù),并且這些數(shù)據(jù)需要高效的查詢和分析能力,那么租用專業(yè)的數(shù)據(jù)庫服務(wù)可能是更好的選擇。這些服務(wù)通常提供了更高的性能、更好的可擴(kuò)展性和更強(qiáng)的
    的頭像 發(fā)表于 10-31 10:50 ?327次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫故障: SQL Server附加數(shù)據(jù)庫出現(xiàn)錯誤823,附加數(shù)據(jù)庫失敗。數(shù)據(jù)庫沒有備份,無法通過備份恢復(fù)數(shù)據(jù)庫
    的頭像 發(fā)表于 09-20 11:46 ?679次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>出現(xiàn)823錯誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    基于WDS證券行業(yè)建設(shè)金融信創(chuàng)云承載數(shù)據(jù)庫類關(guān)鍵應(yīng)用

    基于WDS證券行業(yè)建設(shè)金融信創(chuàng)云承載數(shù)據(jù)庫類關(guān)鍵應(yīng)用
    的頭像 發(fā)表于 09-03 10:07 ?478次閱讀
    基于WDS證券行業(yè)建設(shè)金融信<b class='flag-5'>創(chuàng)</b>云承載<b class='flag-5'>數(shù)據(jù)庫</b>類關(guān)鍵應(yīng)用

    基于分布式存儲WDS的金融信創(chuàng)云承載數(shù)據(jù)庫類關(guān)鍵應(yīng)用

    基于分布式存儲WDS的金融信創(chuàng)云承載數(shù)據(jù)庫類關(guān)鍵應(yīng)用
    的頭像 發(fā)表于 08-16 09:42 ?546次閱讀
    基于分布式存儲WDS的金融信<b class='flag-5'>創(chuàng)</b>云承載<b class='flag-5'>數(shù)據(jù)庫</b>類關(guān)鍵應(yīng)用

    數(shù)據(jù)倉庫與數(shù)據(jù)庫的主要區(qū)別

    數(shù)據(jù)倉庫與數(shù)據(jù)庫是兩個在信息技術(shù)領(lǐng)域中常見的概念,它們在數(shù)據(jù)管理和分析方面發(fā)揮著重要作用。盡管它們在某些方面有相似之處,但它們在設(shè)計、目的和功能上存在顯著差異。本文將介紹
    的頭像 發(fā)表于 07-05 14:57 ?959次閱讀
    主站蜘蛛池模板: 亚洲午夜一区 | 免费高清特级毛片 | 色婷婷精品 | 亚洲视频二 | 日本高清免费aaaaa大片视频 | 视频二区中文字幕 | 美女啪啪91 | 97人人模人人揉人人捏 | 四虎影城 | 毛片一级黄色 | 伊人网视频在线 | 亚1州区2区三区4区产品 | 色淫阁色九九 | 99久久免费午夜国产精品 | 免费一区二区视频 | 亚洲一级视频在线观看 | 国产成人精品日本亚洲直接 | 亚洲天天做日日做天天看2018 | 国产在线观看午夜不卡 | 最好看最新的中文字幕1 | 国产在线一区二区三区四区 | 午夜宅男在线 | 天天做天天爽爽快快 | 美女视频永久黄网站免费观看国产 | 免费aa | 日本人的色道免费网站 | 亚洲一二三四区 | 午夜影剧 | 国产精品大片天天看片 | 亚洲欧洲一区二区三区在线 | 天天怕夜夜怕狠狠怕 | 丁香花的视频免费观看 | 国精视频一区二区视频 | 一本到卡二卡三卡四卡 | 四虎影音在线观看 | 人人澡人人添 | 日韩欧美视频在线一区二区 | 四虎影院黄色片 | 天堂视频在线免费观看 | www.天天操.com| 日本黄色大片免费看 |