我正在考虑使用SQLite作为我正在编写的C++应用程序的后端数据库.我已阅读过trh trolltech网站和sqlite上的相关文档,但信息似乎有点脱节,没有简单的代码片段显示完整的CRUD示例.
我想编写一组辅助函数,以便我可以从我的应用程序轻松地在SQLite中执行CRUD操作.
以下smippet是我想要编写的辅助函数的伪代码.我很感激有关如何"填充"存根函数的建议.有一点特别令人沮丧的是,在任何文档中都没有明确提及查询与运行查询的数据库之间的关系 - 因此建议某种默认连接/表.
在我的应用程序中,我需要能够显式指定运行查询的数据库,因此如果任何答案明确说明如何显式指定查询中涉及的数据库/表(或其他数据库操作),这将非常有用. ).
我的伪代码如下:
#includetypedef boost::shared_ptr 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 }
如果我问的不清楚,我问的是什么是正确的wat来实现上述每个函数(可能除了第一个 - 除非它当然可以更好).
[编辑]
通过删除明确指定表的要求澄清了问题(这已经在SQL查询中完成 - 我忘了.感谢指出Tom
默认情况下,Qt使用应用程序的默认数据库来运行查询.这是使用默认连接名称添加的数据库.有关更多信息,请参阅Qt文档.我不确定默认数据库表的含义,因为要操作的表通常在查询本身中指定?
要回答您的问题,这里是您的一种方法的实现.请注意,bool
我将返回一个QSqlQuery
实例,而不是返回一个实例,以便能够迭代查询的结果.
QSqlQuery runQuery(const Qstring& sql) { // Implicitly uses the database that was added using QSqlDatabase::addDatabase() // using the default connection name. QSqlQuery query(sql); query.exec(); return query; }
您将使用如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setHostName("localhost"); db.setDatabaseName("data.db"); if (!db.open()) { raise ... } QSqlQuery query = runQuery("SELECT * FROM user;"); while (query.next()) { ... }
请注意,通过显式指定相关QSqlDatabase
实例作为QSqlQuery
构造函数的第二个参数,还可以显式指定应该运行查询的数据库:
QSqlDatabase myDb; ... QSqlQuery query = QSqlQuery("SELECT * FROM user;", myDb); ...