【问题标题】:c++ SQL Query Building Libraryc++ SQL查询构建库
【发布时间】:2013-08-23 04:07:09
【问题描述】:

我正在寻找一个提供与 c# SelectQueryBuilder 库类似功能的 c++ 库

http://www.codeproject.com/Articles/13419/SelectQueryBuilder-Building-complex-and-flexible-S

即它允许人们摆脱构建可怕的串联字符串以形成动态 SQL 查询,而是拥有一个库,该库提供一个接口,您可以通过它传递表、要从表中选择的元素等,然后它以字符串形式返回 SQL 查询。

非常感谢任何帮助

编辑:我正在构建的示例查询....直到运行时我们才会知道要选择的实际列,例如不知道会有多少个 VAR1...VARx 以及它们到底是什么。

SELECT * FROM 
    (
        SELECT 
            table_1.id, 
            table_2.name, 
            (select(COALESCE(sum(table_1.col_1 * 1.0) / NULLIF(sum(table_1.col_2 - table_1.col_3),0) * 100,0))) as VAR1, 
            (select(COALESCE(sum(table_1.col_4 * 1.0) / NULLIF(sum(table_1.col_5),0) * 100,0))) as VAR2, 
            sum(table_1.col_2) as VAR3 
        FROM table_1, table_2 
        WHERE table_1.id = table_2.id 
        GROUP BY table_1.id, table_2.name 
    ) VARIABLES 
WHERE VAR3 > 1000

【问题讨论】:

    标签: c++ sql qt selectquerybuilder


    【解决方案1】:

    使用 QSqlQuery,您可以使用占位符并将值绑定到它们:

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (:id, :forename, :surname)");
    query.bindValue(":id", 1001);
    query.bindValue(":forename", "Bart");
    query.bindValue(":surname", "Simpson");
    query.exec();
    

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (?, ?, ?)");
    query.addBindValue(1001);
    query.addBindValue("Bart");
    query.addBindValue("Simpson");
    query.exec();
    

    http://qt-project.org/doc/qt-5.0/qtsql/qsqlquery.html#approaches-to-binding-values

    【讨论】:

    • 这看起来很适合我的需要。谢谢。
    • 我忘了问是否可以嵌套查询/值并动态添加绑定?即,如果我想要“从 table_1 中选择 []”,其中 [] 将在运行时分配,并且是我要选择的值列表?
    • 值绑定是在运行时完成的,我想你可以在 for 循环中使用 addBindValue。如果您发布了一些代码,我可以进一步帮助您。
    • 我已经添加了我正在使用的示例查询(尽管实际示例从数据库中选择了更长的列表)。我目前通过将字符串连接在一起来创建它们,但显然我更希望能够使用您建议的绑定方法。
    • 哦,我明白了,您不仅需要绑定值,还需要创建变量查询。我还没有在 Qt 中看到过类似的东西。我检查了文档qt-project.org/doc/qt-5.0/qtsql/qsqlquery.html,但只有值绑定方法,没有准备长语句。
    猜你喜欢
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2017-01-07
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多