2010-02-22 31 views
6

我嘗試在Linux上處理Qt 4.5.3上的SQLite數據庫。我已經創建了數據庫。從SQLite中選擇Qt

然後,我嘗試在Qt的進行選擇:

db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName(filename); // Here is FULL path to the database. I've checked it twice :) 
bool ok = db.open(); 
qDebug() << db.tables(); 

QSqlQuery query; 
query.exec("select * from lessons"); 
qDebug() << query.size(); 
qDebug() << query.isSelect(); 
qDebug() << query.isValid(); 

但調試控制檯說:

("lessons", "weeklessons", "weeks") 
-1 
true 
false 

爲什麼它選擇什麼?我做錯了什麼?

+4

似乎.size()不使用SQLite工作:(這就是爲什麼你必須-1 – Seba 2011-03-23 20:33:23

回答

0

不知道Qt的情況,我問自己一個問題:QSqlQuery如何知道使用哪個連接。看,截至手冊中發現,基本上有兩種途徑來執行查詢:

  1. query = db.exec("select * from lessons");
    使用的數據庫連接,並從那裏executing
  2. QSqlQuery query(db);
    使用existing database構建查詢,然後執行查詢:
    query.exec("select * from lessons");

編輯:讀多一點之後,似乎默認的連接支持,所以你的榜樣應該工作...

你可以嘗試傳遞查詢作爲構造函數的值嗎?也許它可以工作。

QSqlQuery query("select * from lessons"); 
+0

的Qt使得它爲「默認連接」是的。 ,當然我試圖這樣做。不,同樣的錯誤。 db = QSqlDatabase :: addDatabase(「QSQLITE」); db。setDatabaseName(文件名); bool ok = db.open(); qDebug()<< db.tables(); QSqlQuery query = db.exec(「select * from lessons」); qDebug()<< query.size(); 輸出: (「lesson」,「weeklessons」,「weeks」) -1 – vas3k 2010-02-22 14:01:08

+0

我嘗試將查詢添加到構造函數的值中。同樣的錯誤,不要工作。非常奇怪:( – vas3k 2010-02-22 14:05:29

3

在您的「QSqlQuery查詢;」聲明,你必須指定數據庫連接,例如「QSqlQuery查詢(DB)」

1

鑑於你的程序報告查詢是無效的,看看錯誤信息如下:

QDebug() << query.lastError().text(); 

這會幫助你在調試問題。

+0

Thanx的答案,是的,我知道,但它輸出一個空字符串(只有一個空格):(「lesson」,「weeklessons」,「weeks」) 「」 -1 – vas3k 2010-02-24 11:54:14

+0

你確定查詢實際上起作用了嗎?在SQLite提示符下試一試,也許在查詢結束時添加一個分號可能會有幫助嗎?最後,我會嘗試獲取隨Qt一起發佈的SQLite示例。 – 2010-02-24 12:46:08

+0

是的,它適用於我的SQLite查看器:http://lh3.ggpht.com/_hyIyDtqe5N0/S4KNBpfapeI/AAAAAAAAAU0/3MEliEIy8G4/sqlite2.png 添加分號也沒有幫助。我在哪裏可以找到Qt SQLite示例?我只找到MySQL。 – vas3k 2010-02-24 14:03:56

9

如果查詢定位在有效記錄上,但在調用exec()後,isValid()方法返回true,但它不是:您必須首先移到有效記錄,例如query.first( )或query.next()。 請參閱Qt文檔:http://doc.qt.io/archives/4.6/qsqlquery.html

size()返回-1並不表示沒有結果:SQLite是查詢大小不直接可用的數據庫之一(請參見QSqlDriver的文檔:: hasFeature())。您可以檢查是否返回了行,並通過循環和query.next()來查找大小。

根據您對選擇結果所做的操作,您也可以使用QSqlQueryModel而不是QSqlQuery。

+0

看起來像這個問題。一般來說,@ vas3k應該檢查exec()的返回值,以查看查詢成功的執行情況。 – 2010-04-16 14:37:54