我正在考慮使用SQLite作爲我寫的C++應用程序的後端數據庫。我已經閱讀了奇趣科技網站和sqlite上的相關文檔,但是這些信息看起來有些不一致,沒有簡單的代碼片斷顯示完整的CRUD示例。與Qt一起使用SQLite
我想編寫一套幫助函數,以允許我從我的應用程序輕鬆地在SQLite中執行CRUD操作。
下面的smippet是我設想編寫的幫助函數的僞代碼。我將非常感謝關於如何「填充」存根函數的建議。有一件事特別令人沮喪的是,在任何文檔中都沒有明確提及查詢與查詢所在的數據庫之間的關係 - 因此提示某種默認連接/表。
在我的應用程序中,我需要能夠顯式指定運行查詢的數據庫,所以如果有任何答案說明如何顯式指定查詢(或其他數據庫中涉及的數據庫/表)就此事採取行動)。下面
我的僞代碼如下:
#include <boost/shared_ptr.hh>
typedef boost::shared_ptr<QSqlDatabase> dbPtr;
dbPtr createConnection(const QString& conn_type = "QSQLITE", const QString& dbname = ":memory:")
{
dbPtr db (new QSQlDatabase::QSqlDatabase());
if (db.get())
{
db->addDatabase(conn_type);
db->setDatabaseName(dbname);
if (!db.get()->open)
db.reset();
}
return db;
}
bool runQuery(const Qstring& sql)
{
//How does SQLite know which database to run this SQL statement against ?
//How to iterate over the results of the run query?
}
bool runPreparedStmtQuery(const QString query_name, const QString& params)
{
//How does SQLite know which database to run this SQL statement against ?
//How do I pass parameters (say a comma delimited list to a prepared statement ?
//How to iterate over the results of the run query?
}
bool doBulkInsertWithTran(const Qstring& tablename, const MyDataRows& rows)
{
//How does SQLite know which database to run this SQL statement against ?
//How to start/commit|rollback
}
在什麼情況下,我問的是不明確的,我問什麼是實現每個上述功能的正確笏(可能的例外首先 - 除非它可以被改善)。
[編輯]
通過移除要求明確指定表(這是在SQL查詢已經完成澄清的問題 - 我忘了感謝您指出了這一點湯姆
我發現你也可以clall的exec()直接在QSqlDatabase對象,執行查詢。當然,這隻能在未運行預備語句時使用。仍在閱讀準備好的報表.. – 2010-02-23 16:37:51
準備好的報表如何...? – 2010-02-24 21:28:41