QT數(shù)據(jù)庫連接操作基本學(xué)習(xí)教程
QT數(shù)據(jù)庫連接操作 數(shù)據(jù)庫基本學(xué)習(xí),QT連接數(shù)據(jù)庫 是應(yīng)用開發(fā)的常用基礎(chǔ)操作。經(jīng)過實驗,我總結(jié)了一些例程。這些例程可以連接各種數(shù)據(jù)庫。ps:這里只是我覺得好用的方法。QT另外提供了更高級的方法,如有需要請自己嘗試。先來學(xué)習(xí)如何連接數(shù)據(jù)庫.
連接數(shù)據(jù)庫需要的頭文件:
- #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();
- /新定義一個查詢集合,并指定 鏈接關(guān)鍵字。 如果有多個連接,可以隨意指定一個你需要的。
- QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);
- if(ok)
- {
- bool isok=mquery.exec("select * from sql_set;");
- if (!isok)
- {
- ldb.close();
- return -1;
- }
- //這個是必須的,因為查處的結(jié)果集當(dāng)前位置不在第一條記錄上。
- 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();
- //清除結(jié)果集
- mquery.clear();
- // 如果該連接不再使用,就可以關(guān)閉。
- ldb.close();
- //這里是將從數(shù)據(jù)庫讀出的數(shù)據(jù)寫到一個list控件里
- ui.list_out->insertItem(ui.list_out->count(),sHostName);
- ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);
- }
- else
- {
- // 打開本地數(shù)據(jù)庫失敗,
- QMessageBox::critical(0, QObject::tr("讀取Access數(shù)據(jù)庫錯誤!"),db.lastError().text());
- return -1;
- }
2、連接mssql2000 數(shù)據(jù)庫
- QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName);
- db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc數(shù)據(jù)庫驅(qū)動
- db.setHostName(sHostName);
- db.setPort(1433);
- db.setDatabaseName(strDatabaseName); // 我們之前建立的數(shù)據(jù)庫連接關(guān)鍵字
- db.setUserName(sUserName);
- db.setPassword(sPassword);
- bool ok = db.open(); //嘗試連接數(shù)據(jù)庫
- if(ok)
- {
- menuset_set->dbdb=db;
- // 這里用sa已經(jīng)成功連上數(shù)據(jù)庫
- return 0;
- }
- else
- {
- // 打開數(shù)據(jù)庫失敗,
- QMessageBox::critical(0, QObject::tr("數(shù)據(jù)庫連接錯誤!"),db.lastError().text());
- return -2;
- }
- mssql2000數(shù)據(jù)庫連接的使用和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();
- //清除結(jié)果集
- mquery.clear();
3、連接mysql 數(shù)據(jù)庫
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql數(shù)據(jù)庫驅(qū)動
- db.setHostName("localhost");
- db.setDatabaseName("exampledb"); // 數(shù)據(jù)庫名稱
- db.setUserName("sa"); // 用戶名
- db.setPassword("1"); // 密碼
- bool ok = db.open(); // 嘗試連接數(shù)據(jù)庫
- if(ok)
- {
- QSqlQuery myquery;
- if(myquery.exec("select * from employeedb"))
- {
- int num = 0;
- if(db.driver()->hasFeature(QSqlDriver::QuerySize))
- {
- num = myquery.size(); // 如果支持結(jié)果影響的行數(shù),那么直接記錄下來
- }
- else
- {
- myquery.last(); //否則定位到結(jié)果最后
- num = myquery.at() + 1;
- }
- //這里添加數(shù)據(jù)庫的查詢結(jié)果處理操作
- }
- else // 如果查詢失敗
- {
- QSqlError error = myquery.lastError();
- }
- }
- else // 打開數(shù)據(jù)庫失敗
- {
- }
小結(jié):QT數(shù)據(jù)庫連接操作 數(shù)據(jù)庫基本學(xué)習(xí)的內(nèi)容介紹完了,希望本篇文章能夠幫助你學(xué)習(xí),想要深入了解數(shù)據(jù)庫的話,請參考編輯推薦!