<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
近期花了兩個多月時間,將資料庫相關的程式碼重新封裝成了各種輪子(這條路必須打通,打通以後,相關專案只需要引入這個元件pri即可),測試了從Qt4.7到Qt6.1的各種版本,測試了odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金倉等資料庫,測試了本地連線、遠端連線、阿里雲連線等,測試了windows、linux、mac等系統,將所有專案資料庫相關的程式碼全部更新了一遍。能夠相容這麼多Qt版本和資料庫外掛以及測試驗證系統,估計全網也沒幾個人,全國11W Qter開發者中應該也是最多不超過10人。
在資料庫相關的應用中,如果僅僅是單機版本,沒有特別的需要(比如領導指定,或者需要遠端存放資料),強烈建議使用sqlite資料庫,這是本人經過無數次的對比測試和N個商業專案應用得出的結論。
Qt天生內建了sqlite資料庫,只需要釋出的時候帶上外掛就行(可以看到外掛動態庫檔案比其他幾種都要大,那是因為直接將資料庫的原始碼都編譯進去了,而其他只編譯了中間通訊互動的外掛原始碼),其他資料庫要麼還要帶上動態庫,要麼還需要建立資料來源;速度上,絕對無與倫比的出類拔萃,同樣的資料庫結構(表結構、索引等完全一致),查詢速度和批次更新速度、資料庫事務等,速度都是其他幾種的至少3倍以上,而且隨著資料量的增大對比越發明顯;
幾千萬的資料量完全沒問題,而且速度和效能都還可以,不要以訛傳訛網上部分菜雞說的不支援百萬以上的資料量,本人親測億級別,資料量建議千萬級別以下,著重注意資料庫表和索引的設計;
其他資料庫還要注意版本的區別,ODBC資料來源形式還容易出錯和執行失敗;
sqlite資料庫也有幾個重大缺點:不支援加密,不支援網路存取,不支援部分資料庫高階特性,不支援海量資料(億級別以上),但是對於絕大部分Qt專案還是足夠;
資料庫支援友好度大致是 sqlite > postgresql > mysql > odbc ;
以上都是在Qt環境中個人測試得出的結論,結果未必正確,作為參考即可,其他程式設計環境比如C#、JAVA請忽略,也許差別可能在中間通訊的效率造成的;
void MainWindow::testDb() { //列印當前Qt對應支援的資料庫驅動名稱 qDebug() << QSqlDatabase::drivers(); //建立資料庫物件,驅動名稱根據列印的填寫,"QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7" QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); //設定資料庫引數,要檢視Qt檔案是否支援該資料庫,一般建議預設的就好不用設定 //db.setConnectOptions("MYSQL_OPT_RECONNECT=1;MYSQL_OPT_CONNECT_TIMEOUT=1;"); //設定資料庫的主機地址 db.setHostName("127.0.0.1"); //設定資料庫通訊埠,預設值 mysql:3306 postgres:5432 sqlserver:1433 db.setPort(5433); //設定資料庫名稱,預設值 mysql:mysql postgres:postgres sqlserver:master //如果是sqlite資料庫只需要設定這個引數即可,其餘引數都不用設定,因為sqlite不需要主機埠和使用者 //引數內容為資料庫檔案的路徑 db.setDatabaseName("c:/test.db"); db.setDatabaseName("postgres"); //設定登入使用者名稱稱,預設值 mysql:root postgres:postgres sqlserver:sa db.setUserName("postgres"); //設定登入使用者密碼 db.setPassword("admin"); //開啟資料庫,如果失敗列印錯誤資訊 if (!db.open()) { qDebug() << db.lastError(); return; } //執行增刪改查 //常規查詢語句 QString sql = "select UserName,UserPwd from UserInfo"; //帶條件+排序+分組的查詢語句 sql = "select UserName,UserPwd from UserInfo where UserName='admin' order by UserName asc group by UserGroup"; //構建查詢物件,傳入sql語句查詢,可以先判斷執行成功與否再來取值 QSqlQuery query; if (query.exec(sql)) { //迴圈取出所有查詢結果,對應結果是QVariant型別可以自行to到其他型別 while(query.next()) { qDebug() << query.value(0).toString() << query.value(1).toString(); } } //新增資料,拼接字串的形式比較通用,還有預留位置的形式 sql = "insert into UserInfo(UserName,UserPwd) values('ceshi', '12345')"; //刪除資料,如果不加where條件則表示刪除整個表的資料 sql = "delete from UserInfo where UserName='ceshi'"; //更新資料,如果不加where條件則表示更新整個表的資料 sql = "update UserInfo set UserPwd='admin123' where UserName='ceshi'"; //可以複用上面的QSqlQuery物件,也可以重新new,複用的話需要先呼叫clear query.clear(); //新增+刪除+更新 資料只需要知道執行成功與否就行 if (!query.exec(sql)) { qDebug() << "執行sql語句失敗"; } //關閉資料庫,程式自動關閉的時候也會關閉,所以只是用一個資料庫的情況下無需手動關閉 db.close(); }
(一)功能特點
(二)資料庫通訊管理執行緒類
(三)資料庫通用翻頁類
(四)分頁導航控制元件
(五)自動清理傳輸執行緒類
(六)自定義委託全家桶
(七)效果圖
(八)體驗地址
體驗地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 檔名:bin_dbtool.zip
國內站點:https://gitee.com/feiyangqingyun
國際站點:https://github.com/feiyangqingyun
以上就是Qt資料庫相關應用開發總結的詳細內容,更多關於Qt資料庫開發的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45