Qt中使用mysql連線遠端伺服器
阿新 • • 發佈:2019-02-06
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();