我正在考虑使用 SQLite 作为我正在编写的 C++ 应用程序的后端数据库。我已经阅读了 trolltech 网站和 sqlite 上的相关文档,但信息似乎有点脱节,没有简单的片段显示完整的 CRUD 示例。
我想编写一组辅助函数,让我可以从我的应用程序中轻松地在 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 查询中完成 - 我忘记了。感谢您指出 Tom