• qt QSqlQuery



    QT数据库QSqlQuery

     
    SQL执行操作

    QSqlQuery提供了对数据库记录的Select、Insert、Update、Delete操作。

    SELECT操作:

    QSqlQuery query;

    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");

    while (query.next()) {

    QString name = query.value(0).toString();

    int salary = query.value(1).toInt();

    qDebug() << name << salary;

    }

    通过QSqlQuery::next()、QSqlQuery::previous()、QSqlQuery::first()、QSqlQuery::last()、QSqlQuery::seek(),可以得到下一条、上一条、第一条、最后一条、任意一条记录的位置。

    INSERT操作:

    //单一插入数据

    QSqlQuery query;

    query.prepare("INSERT INTO employee (id, name, salary) "

    "VALUES (:id, :name, :salary)");

    query.bindValue(":id", 1001);

    query.bindValue(":name", "Thad Beaumont");

    query.bindValue(":salary", 65000);

    query.exec();

    //批量插入数据

    QSqlQuery query;

    query.prepare("insert into myTable values (?, ?)");

    QVariantList ints;

    ints << 1 << 2 << 3 << 4;

    query.addBindValue(ints);

    QVariantList names;

    names << "Harald" << "Boris" << "Trond" << QVariant(QVariant::String);

    query.addBindValue(names);

    if (!query.execBatch())

    qDebug() << query.lastError();

    UPDATE操作:

    QSqlQuery query;

    query.prepare("UPDATE employee SET salary = ? WHERE id = 1003");

    query.bindValue(0, 70000);

    query.exe();

    DELETE操作:

    QSqlQuery query;

    query.exec("DELETE FROM employee WHERE id = 1007");

    事务处理:

    QSqlDatabase::database().transaction();

    QSqlQuery query;

    query.exec("SELECT id FROM employee WHERE name = 'Torild Halvorsen'");

    if (query.next()) {

    int employeeId = query.value(0).toInt();

    query.exec("INSERT INTO project (id, name, ownerid) "

    "VALUES (201, 'Manhattan Project', "

    + QString::number(employeeId) + ")");

    }

    QSqlDatabase::database().commit();

    如果数据库引擎支持事务处理,则函数QSqlDriver::hasFeature(QSqlDriver::Transactions)将返回 真。

    可以通过调用QSqlDatabase::transaction()来初始化一个事务处理。之后执行你想在该事务处理的工作。

    完了再执行QSqlDatabase::commit()来提交事务处理或QSqlDatabase::rollback()取消事务处理。

    这里在举个QSqlDriver::hasFeature(QSqlDriver::QuerySize)例子,可以较快的统计查询记录行数。

    QSqlQuery query;

    int numRows;

    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");

    QSqlDatabase defaultDB = QSqlDatabase::database();

    if (defaultDB.driver()->hasFeature(QSqlDriver::QuerySize)) {

    numRows = query.size();

    } else {

    // this can be very slow

    query.last();

    numRows = query.at() + 1;

    }

    存储过程:

    AsciiToInt()是数据库中的一个存储过程。

    但我在网上以前好像看过说是SQL Server中的存储过程是通过"EXEC"完成的,而不是"CALL",这里我不确定!留下一个疑问吧~

    QSqlQuery query;

    query.prepare("CALL AsciiToInt(?, ?)");

    query.bindValue(0, "A");

    query.bindValue(1, 0, QSql::Out);

  • 相关阅读:
    Android View 阴影的总结
    清晰的教你如何将 Maven 项目上传至 中央仓库以及版本更新
    简单粗暴的上传项目至 Github
    App自动更新(DownloadManager下载器)
    类型判断
    前端防御XSS
    window.location.href/replace/reload()/页面跳转+替换+刷新
    对数组排序进行"洗牌"(随机排序)
    iframe跨域上传图片
    Vim 新手节省时间的小技巧
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4968076.html
Copyright © 2020-2023  润新知