Sti*_*MAN 15 c++ sqlite qt qtsql
我正在考虑使用SQLite作为我正在编写的C++应用程序的后端数据库.我已阅读过trh 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
}
Run Code Online (Sandbox Code Playgroud)
如果我问的不清楚,我问的是什么是正确的wat来实现上述每个函数(可能除了第一个 - 除非它当然可以更好).
[编辑]
通过删除明确指定表的要求澄清了问题(这已经在SQL查询中完成 - 我忘了.感谢指出Tom
Ton*_*vel 17
默认情况下,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;
}
Run Code Online (Sandbox Code Playgroud)
您将使用如下:
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())
{
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,通过显式指定相关QSqlDatabase实例作为QSqlQuery构造函数的第二个参数,还可以显式指定应该运行查询的数据库:
QSqlDatabase myDb;
...
QSqlQuery query = QSqlQuery("SELECT * FROM user;", myDb);
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23145 次 |
| 最近记录: |