1. 程式人生 > >Qt中使用mysql連線遠端伺服器

Qt中使用mysql連線遠端伺服器

db = QSqlDatabase::addDatabase("QMYSQL");
    qDebug() << "MYSQL driver valid" << db.isValid();


首先檢視有沒有MYSQL的驅動。

一般Qt開始時都沒有mysql這個驅動。顯示 MYSQL driver is not valid。這裡 我們只討論Qt5.2.1版本的,如果是版本的話,可能會很麻煩。要去編譯mysql驅動。所以我建議還不如直接解除安裝了,用最近的呢。

Qt5.2.1版本如何解決沒有MYSQL驅動這個問題呢?很簡單,如果你的電腦裡面沒有暗轉mysql資料庫,就去安裝個。安裝完mysql,可能要加環境變數。編輯Path,在後面加上C:\Program Files\MySQL\MySQL Server 5.7\bin 。
然後到安裝目錄,將c:\Program File\MySQL\MySQL Server 5.7\lib\中的libmysql.dll這個檔案拷貝到D:\Qt\Qt5.2.1\5.2.1\mingw48_32\bin 目錄下。Ps:以上的目錄是我電腦的安裝目錄,具體要根據你自己的電腦。

mysql安裝好後,自己就可以直接用dos測一下了:

mysql -u 使用者名稱 -p密碼 -h 地址 例:mysql -u root -p123 -h 127.0.0.1

這裡可以介紹幾個mysql簡單的命令: show databases;//顯示資料庫  usemysql ;//選擇那個資料庫 show table ;//顯示錶 describe 表名;//顯示某個表的欄位說明

db.setHostName(sIp);
    db.setPort(iPort);
    db.setUserName(sUserNm);
    db.setPassword(sPwd);
    //連線sql伺服器
    bool r = db.open();
if (r)  
    {  
        qDebug() << "SQL Server 2000 Connect OK!";  
  
        /* 計算當前表中id*/  
        QSqlQuery query1 = QSqlQuery(db);  
        query1.clear();  
        query1.prepare("select top 1 ID from SQL_2000 order by ID desc");  
        bool a = query1.exec();  
        int id;  
        if (a)  
        {  
            while(query1.next())  
            {  
                id = query1.value(0).toInt();  
            }  
        }  
  
        /*插入資料*/  
        QSqlQuery query2 = QSqlQuery(db);  
        QString sq1 = QObject::tr("insert into SQL_2000(Id,Ip,Port,UserName,Password,DbType,DbName)"  
                                  "values (?, ?, ?, ?, ?, ?, ?)");  
        bool b = query2.prepare(sq1);  
        if(b)  
        {  
            qDebug() << "insert data success!";  
        }  
        query2.bindValue(0, id+1);  
        query2.bindValue(1, sIp);  
        query2.bindValue(2, iPort);  
        query2.bindValue(3, sUserNm);  
        query2.bindValue(4, sPwd);  
        query2.bindValue(5, sDbType);  
        query2.bindValue(6, sDbNm);  
  
        /*查詢資料*/  
        QSqlQuery query3 = QSqlQuery(db);  
        query3.prepare("select * from SQL_2000 where Id=1");  
        bool c = query3.exec();  
        if (c)  
        {  
            qDebug() << "select data success!";  
            while(query3.next())  
            {  
                qDebug() << query3.value(0);  
                qDebug() << query3.value(1);  
                qDebug() << query3.value(2).toInt();  
            }  
        }  
        else  
        {  
            qDebug() << query3.lastError().text().data();  
        }  
  
        /*刪除資料*/  
        QSqlQuery query4 = QSqlQuery(db);  
        query4.prepare("delete from SQL_2000 where Id=1");  
        bool d = query4.exec();  
        if (d)  
        {  
            qDebug() << "delete data success!";  
        }  
        else  
        {  
            qDebug() << query3.lastError().text().data();  
        }  
    }  
    else  
    {  
        QMessageBox::information(this, tr("提示"), tr("Sql Server資料庫連線失敗!"), tr("確定"));  
        qDebug() <<"error_SqlServer:\n" << db.lastError().text();  
    }  
  
    db.close();