Qt解析QSqlDatabase、QSqlQuery类操作数据库

5 篇文章 0 订阅

1. Qt提供的对不同数据库的驱动支持:

Driver Type Description:
QDB2        IBM DB2
QIBASE     Borland InterBase Driver
QMYSQL  MySQL Driver
QOCI        Oracle Call Interface Driver
QODBC    ODBC Driver (includes Microsoft SQL Server)
QPSQL     PostgreSQL Driver
QSQLITE   SQLite version 3 or above
QSQLITE2 SQLite version 2
QTDS        Sybase Adaptive Server

2 .创建连接Oracle数据库实例:
    1. QSqlDatabase db = QSqlDatabase::addDatabase("QOCI", "OracleA");  
    2. db.setHostName("localhost");  //数据库主机名   
    3. db.setDatabaseName("scott");  //数据库名   
    4. db.setUserName("stott");      //数据库用户名   
    5. db.setPassword("tiger");      //数据库密码   
    6. db.open();          //打开数据库连接  
    7. db.close();         //释放数据库连接  
    在使用 QSqlDatabase::addDatabase( "QOCI","OracleA" )函数时, 第一个参数是驱动类型主键,第二个是连接名。
    //qsqldatabase.cpp文件
    class QConnectionDict: public QHash<QString, QSqlDatabase>
    {
    public:
        inline bool contains_ts(const QString &key)
        {
            QReadLocker locker(&lock);
            return contains(key);
        }
        inline QStringList keys_ts() const
        {
            QReadLocker locker(&lock);
            return keys();
        }

        mutable QReadWriteLock lock;
    };
    Q_GLOBAL_STATIC(QConnectionDict, dbDict)
     
    Qt定义了一个全局 QHash 容器用来存储这个进程里所有的数据库连接对象,存储格式QHash<连接名,QSqlDatabase >。
     
    每次调用addDatabase接口都会检查这个容器里是否有这个连接,有的话断开之前的连接,建立现在加入的,没有直接 添加这个连接。
     
    如果进程里涉及到操作多个不同数据库,则每个数据库的对象在添加连接时要区别开不一样的连接名,如果连接名相同,会使上一个已经建立的连接失效。
     
    如果进程里多处地方(比如不同的线程)只连接到一个数据库,则需要把QSqlDatabase对象封装为全局对象(静态或者封装单例),所有的操作对象都使用这个数据库连接对象来进行操作。
     
    (举例:进程中多个线程都建立了一个封装数据库操作的对象,他们都需要连接到一个数据库,所以单例就可以保证连接一次到处引用。如果想保持你线程里有一个独立的连接数据库操作对象,就需要调用addDatabase("device","connectName")连接名要不同于其他线程建立的,不然其他线程在操作数据库将无效)

     
    3.使用QSqlQuery类操作数据库:
    bool InsertData(cosnt Users &users)
    {
      m_pqReportDB.transaction(); //使用数据库事务操作对下面批量插入性能会提高很多
      QSqlQuery sqlQuery(db); //使用已经打开成功的QSqlDatabase数据库对象驱动
      for(int i= 0; i <users.size(); i++)
      {
       sqlQuery.prepare("insert into tables(id, name) values(?,?)"); 
       sqlQuery.addBindValue(users[i].id); //还可以使用bindValue接口,参数绑定
       sqlQuery.addBindValue(users[i].name); 
       if (!sqlQuery.exec())
       {
         QSqlError error = sqlQuery.lastError();
         PQ_LOG_ERROR(error.text()); //记录错误日志
         m_pqReportDB.rollback(); //遇到错误,事务回滚
         return false;
       }
      }
      m_pqReportDB.commit();//提交事务,批量插入执行
      return true;
    }


    • 3
      点赞
    • 10
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    ### 回答1: Qt是一个跨平台的应用程序开发框架,可用于开发图形界面和网络应用程序。它的json和http库提供了方便的方式来进行网络通信和数据交互。下面我将简要介绍在Qt中如何使用json和http进行post数据到数据库。 首先,我们需要使用Qt的网络模块来发送HTTP POST请求。可以使用QNetworkAccessManager来发送请求,并使用QNetworkRequest来设置请求的URL、头信息和其他参数。然后,使用QNetworkReply来接收服务器的响应。 接下来,我们需要将待发送的数据转换为json格式。可以使用QJsonDocument来创建一个json文档对象,并使用QJsonObject和QJsonArray来创建和操作json对象和数组。将需要发送的数据转换为json格式后,可以使用QJsonDocument的toJson()函数将其转换为QString型的数据。 然后,将转换后的json数据添加到HTTP请求的body中。可以使用QHttpMultiPart来创建一个multipart/form-data型的数据实体,将json数据添加到其中,然后将该实体添加到HTTP请求的body中。 最后,发送HTTP请求,并接收服务器的响应。通过connect()函数以及相应的信号和槽函数来处理请求的发送和响应的接收。可以在槽函数中解析服务器响应的json数据,并根据需要将其存储到数据库中。 总结起来,使用Qt的json和http库进行数据库的post操作的步骤如下:创建并设置HTTP请求、将待发送的数据转换为json格式、将json数据添加到HTTP请求的body中、发送HTTP请求并接收服务器的响应、解析并处理响应的json数据。 以上是使用Qt进行json、http和数据库操作的基本步骤,具体实现还需要结合具体的业务逻辑和数据库操作接口来进行。希望这些信息对您有所帮助! ### 回答2: Qt是一款跨平台的C++开发框架,可以方便地进行JSON数据的处理、HTTP的POST请求以及与数据库的交互。 首先,Qt提供了QJsonDocument和相关的函数,可以方便地完成JSON数据的解析和生成。可以使用QJsonDocument::fromJson()函数将JSON数据转换为QJsonDocument对象,再使用QJsonObject和QJsonArray等对JSON数据进行操作。另外,使用QJsonDocument::toJson()函数可以将QJsonDocument对象转换为JSON格式的字符串。 其次,Qt提供了QNetworkAccessManager和相关的函数,可以方便地进行HTTP的POST请求。可以使用QNetworkRequest设置请求的URL、请求头等信息,并使用QNetworkReply获取服务器返回的数据。可以通过发送POST请求来将JSON数据发送给服务器,并在收到服务器返回的数据后进行处理。 此外,Qt还提供了QtSql模块,可以方便地与数据库进行交互。可以使用QSqlDatabase来连接到数据库,并使用QSqlQuery执行SQL语句。通过执行INSERT语句,可以将JSON数据存储到数据库中。同样,可以使用SELECT语句从数据库中读取数据,并将其转换为JSON格式进行处理和显示。 综上所述,使用Qt可以方便地完成JSON数据的处理、HTTP的POST请求以及与数据库的交互。可以通过QJsonDocument解析和生成JSON数据,使用QNetworkAccessManager发送HTTP的POST请求,以及使用QtSql模块与数据库进行交互,实现数据的存储和读取。对于JSON数据的处理,可以将其转换为QJsonObject和QJsonArray对象进行操作。对于HTTP的POST请求,可以通过QNetworkRequest设置请求信息,并使用QNetworkReply获取服务器返回的数据。对于数据库操作,可以使用QSqlDatabase连接数据库,并使用QSqlQuery执行SQL语句。 ### 回答3: Qt 是一个跨平台的应用程序框架,可以用于开发各种型的应用程序。在 Qt 中,可以使用 JSON 进行数据交换和存储。JSON 是一种轻量级的数据交换格式,易于阅读和编写。 在 Qt 中,可以使用 QJsonDocument 来处理 JSON 数据。可以将 JSON 字符串转换为 QJsonDocument 对象,然后通过 QJsonValue 的方法获取其中的数据。还可以将 QVariantMap 或 QVariantList 转换为 JSON 字符串。 Qt 还提供了网络模块 QNetworkAccessManager,可以进行 HTTP 请求。可以使用 QNetworkRequest 来设置请求的 URL、请求头和请求方法等信息。使用 QNetworkAccessManager 的 post() 方法可以发送 HTTP POST 请求,并使用 QNetworkReply 接收服务器的响应结果。 在进行数据库操作时,可以使用 Qt数据库模块。Qt 提供了 QSqlDatabase 来管理数据库连接,可以连接各种不同型的数据库。可以使用 QSqlQuery 执行 SQL 查询和操作使用这些和方法,可以实现从 HTTP POST 请求中获取到 JSON 数据,并将其存储到数据库中。首先,使用 QNetworkAccessManager 发送 HTTP POST 请求,接收到响应后,使用 QJsonDocument 解析响应的 JSON 数据。然后,将解析后的数据插入到数据库中,可以通过 SQL 语句执行插入操作。 总之,Qt 提供了强大而灵活的工具和模块,可以方便地实现 JSON 数据的解析、HTTP POST 请求和数据库操作使用这些功能,可以快速地开发出具有数据交换和存储功能的应用程序。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值