2014-01-10 200 views
2

得到sqlite錯誤代碼我在我的Qt程序中使用sqlite數據庫。我怎樣才能從Qt

QSqlDatabase db; 
db = QsqlDatabase::addDatabase("QSQLITE"); 

當我無法從源碼db.lastError()功能數據總是返回同樣的事情

QSqlError(-1, "Driver not Loaded", "Driver not loaded") 

我怎樣才能得到的Qt sqlite error codes

upd1:

QSqlQuery query; 
query.exec(QString("select NAME from PEOPLE where AGE=%1").arg(age)); 
if(query.next()) 
{ 
} 
else 
{ 
    //check for sqlite error 
} 
+0

*在*和*,其中*您檢查錯誤?你能再看看更多的代碼嗎?此外,「加入」後的數據庫,你檢查的是['isValid'(http://qt-project.org/doc/qt-5.0/qtsql/qsqldatabase.html#isV​​alid)返回TRUE? –

+1

您是否檢查過http://qt-project.org/doc/qt-5/qsqlerror.html#number? – lpapp

+0

@Joachim Pileborg我檢查'isValid'返回TRUE;。 – user4757345

回答

2

您可以用Qt的API本身就是下面的方法做的最好的:

int QSqlError::number() const

返回數據庫特定的錯誤號或-1如果無法確定。

瞭解如何從sqlite的錯誤代碼在驅動程序代碼庫本身的處理方式:

https://qt.gitorious.org/qt/qtbase/source/eb5c0f4b1266702c016b032e281bb92a3a642da6:src/sql/drivers/sqlite/qsql_sqlite.cpp#L324

你可以看到相應的QSqlError constructor用於與通過低級錯誤代碼它作爲你可以用上述方法獲得的最後一個參數。

正如你所看到的,它不處理所有的低級失誤相似,但在那裏休息一個默認的開關情況。即使在後一種情況下,錯誤也會傳遞給構造函數。

你需要知道的是,通常情況下,它不能確定確切的低級錯誤在這種情況下,它會返回-1按文檔。

把這個付諸實踐,你會寫這樣的事:

QSqlQuery query; 
query.exec(QString("select NAME from PEOPLE where AGE=%1").arg(age)); 
if (query.next()) 
{ 
} else { 
    qDebug() << "SqLite error:" << query.lastError().text() << ", SqLite error code:" << query.lastError().number(); 
}