当前位置:  开发笔记 > 编程语言 > 正文

使用SQLite和Qt

如何解决《使用SQLite和Qt》经验,为你挑选了1个好方法。

我正在考虑使用SQLite作为我正在编写的C++应用程序的后端数据库.我已阅读过trh trolltech网站和sqlite上的相关文档,但信息似乎有点脱节,没有简单的代码片段显示完整的CRUD示例.

我想编写一组辅助函数,以便我可以从我的应用程序轻松地在SQLite中执行CRUD操作.

以下smippet是我想要编写的辅助函数的伪代码.我很感激有关如何"填充"存根函数的建议.有一点特别令人沮丧的是,在任何文档中都没有明确提及查询与运行查询的数据库之间的关系 - 因此建议某种默认连接/表.

在我的应用程序中,我需要能够显式指定运行查询的数据库,因此如果任何答案明确说明如何显式指定查询中涉及的数据库/表(或其他数据库操作),这将非常有用. ).

我的伪代码如下:

#include 

typedef 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



1> Ton van den ..:

默认情况下,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);
...


准备好的陈述怎么样?
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有