QT 操作 sqlite資料庫(二)—-問題與其解決方案

來源:互聯網
上載者:User

上一節從網路上找了一個一般的樣本給大家,下面將逐步修改代碼將其變為常規開發中可用的可複用代碼。

首先說下上面的代碼在本人實際使用過程中遇到的問題及如何結果

1、建立程式後提示“QSqlDatabase: No such file or directory” 的錯誤

2、大部分的執行個體中直接通過在main函式宣告QSqlDatabase dbconn=QSqlDatabase::addDatabase("QSQLITE")來添加資料庫,建立的QSqlDatabase對象的範圍有問題,即在其他的函數或這類對象中使用此局部對象的問題,
還有就是在其他非dbconn範圍函數中在debug調試版本中可以通過QSqlQuery得到結果,但是在非debug調試版本中無法擷取到結果

3、在使用QSqlQuery的時候直接通過如下方式使用

{.....    QSqlQuery query;    query.exec("create table student(id varchar,name varchar)"); .....}

首先說明這條語句可以執行的前提是在同一個函數中(前面樣本中為main函數),且聲明的QSqlDatabase對象在同一個範圍中;

如果在其他非QSqlDatabase對象的函數或範圍中的時候在debug的調試狀態下可以得到QSqlQuery 的執行結果,但是在非debug調試狀態下將得不到所要的結果(如通過QSqlQuery 執行select語句)

4、使用QSqlQuery  沒有任何參數的對象,運行exec函數的時候如何尋找我要執行那個資料庫的sql語句?

 

針對以上的問題,可以有以下的解決方案

1、可以通過在工程的pro檔案添加QT += sql 使工程(或lib)支援資料庫的操作

2、可以通過如下代碼方式建立一個QSqlDatabase的指標,然後將指標儲存在類中,這樣就可以解決範圍的問題,

QSqlDatabase * m_sqliteDB= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", "dataSqlite"));

    為了防止QSqlQuery查詢不到結果,最好是建立資料庫的時候指定連結名(connectionName),就是上面代碼的第二個參數。

3、在使用了2的解決方案後,其實3也就容易解決了,在聲明QSqlQuery的時候加上QSqlDatabase 參數,代碼如下

QSqlQuery query(*m_sqliteDB);

其中m_sqliteDB是通過2的方案中建立的指標的解引用。

然後再調用 query的exec函數執行代碼即可。

4、當使用3的解決方案後,這時也就不存在說因為在不同的函數中使用QSqlQuery 無參數對象是,直接調用其exec函數的時候迷惑為什麼沒有說明是使用哪一個資料庫的問題了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.