zoukankan      html  css  js  c++  java
  • QT连接数据库的基本操作

    QT连接数据库 是应用开发的常用基础操作。经过实验,我总结了一些例程。这些例程可以连接各种数据库。
    ps:这里只是我觉得好用的方法。QT另外提供了更高级的方法,如有需要请自己尝试。

    连接数据库需要的头文件:
    #include <QSqlDatabase>
    #include <QSqlQuery>

    1、连接微软的Access----------------------------------------------------------------------------------------------
        QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
        ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=system.mdb;UID=;PWD=xiaozhuset");
        bool ok = ldb.open();
       //新定义一个查询集合,并指定 链接关键字。 如果有多个连接,可以随意指定一个你需要的。
        QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);       
        if(ok)
        {
            bool isok=mquery.exec("select * from sql_set;");
            if (!isok)
            {
                ldb.close();
                return -1;
            }      
     
           //这个是必须的,因为查处的结果集当前位置不在第一条记录上。
            mquery.next();

            QString sHostName=mquery.value(1).toString();
            QString sDatabaseName=mquery.value(2).toString();
            QString sUserName=mquery.value(3).toString();
            QString sPassword=mquery.value(4).toString();
           
           //清除结果集
            mquery.clear();
         // 如果该连接不再使用,就可以关闭。
            ldb.close();
       
           //这里是将从数据库读出的数据写到一个list控件里
            ui.list_out->insertItem(ui.list_out->count(),sHostName);
            ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);   
                  
        }
        else
        {
            // 打开本地数据库失败,
            QMessageBox::critical(0, QObject::tr("读取Access数据库错误!"),db.lastError().text());
            return -1;
        }   


    2、连接mssql2000 数据库--------------------------------------------------------------------------------------------
            QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName);   
                   
            db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动
            db.setHostName(sHostName);
            db.setPort(1433);
            db.setDatabaseName(strDatabaseName); // 我们之前建立的数据库连接关键字
            db.setUserName(sUserName);
            db.setPassword(sPassword);
            bool ok = db.open(); //尝试连接数据库
            if(ok)
            {
                menuset_set->db=db;
                // 这里用sa已经成功连上数据库           
                return 0;
            }
            else
            {
                // 打开数据库失败,
                QMessageBox::critical(0, QObject::tr("数据库连接错误!"),db.lastError().text());
                return -2;
            }       
    mssql2000数据库连接的使用和Access连接使用方法一样。
        QSqlQuery mquery=QSqlQuery::QSqlQuery(db);       
        bool ok1=mquery.exec("select * from CarteMenu;");
        if (ok1==false)return -1;
        QString menu_mkey=mquery.value(13).toString();
        QString strmenu_lang=mquery.value(3).toString();
       //清除结果集
        mquery.clear();

    3、连接mysql 数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
    db.setHostName("localhost");
    db.setDatabaseName("exampledb"); // 数据库名称
    db.setUserName("sa"); //  用户名
    db.setPassword("1"); // 密码
    bool ok = db.open(); // 尝试连接数据库
    if(ok)
    {
         QSqlQuery myquery;
          if(myquery.exec("select * from employeedb"))
          {
              int num = 0;
              if(db.driver()->hasFeature(QSqlDriver::QuerySize))
              {
                  num = myquery.size(); // 如果支持结果影响的行数,那么直接记录下来
               }
             else
             {
                  myquery.last(); //否则定位到结果最后
                  num = myquery.at() + 1;
              }
              //这里添加数据库的查询结果处理操作

        }
        else // 如果查询失败
        {
               QSqlError error = myquery.lastError();
         }
     }
     else // 打开数据库失败
    {

  • 相关阅读:
    [USACO4.2]草地排水Drainage Ditches
    bzoj3236:[AHOI2013]作业
    小A买彩票-(组合数)
    CSS样式整理大全
    P1880 [NOI1995]石子合并-(环形区间dp)
    P1147连续自然数和-(尺取法)
    POJ2456Aggressive cows-(二分判定)
    NYOJ737石子合并(二)-(区间dp)
    牛客网-乌龟跑步-(dfs)
    int和string之间的转换
  • 原文地址:https://www.cnblogs.com/buffer/p/1488613.html
Copyright © 2011-2022 走看看