詳解 Qt 4訪問(wèn)Sqlite數(shù)據(jù)庫(kù)
本文介紹的詳解 Qt 4訪問(wèn)Sqlite數(shù)據(jù)庫(kù),文章不僅對(duì)sqlite做了簡(jiǎn)單描述,并且很詳細(xì)的介紹了sqlite的優(yōu)勢(shì)和操作,不多說(shuō)了,我們先來(lái)看內(nèi)容。
sqlite簡(jiǎn)介
sqlite 是一款輕量級(jí)的、基于文件的嵌入式數(shù)據(jù)庫(kù),2000年就已經(jīng)誕生,經(jīng)過(guò)7年多的發(fā)展,直到今天已經(jīng)成為***的嵌入式數(shù)據(jù)庫(kù),包括google在內(nèi)的公司 在其桌面軟件中亦使用 sqlite 存儲(chǔ)用戶數(shù)據(jù)。由此可以看出,已經(jīng)沒(méi)有任何理由去懷疑sqlite的穩(wěn)定性了。
sqlite的優(yōu)勢(shì)
1、免配置,和access一樣,只要把數(shù)據(jù)庫(kù)文件通過(guò)ftp上傳到服務(wù)器上就可以使用,不需要服務(wù)器的額外支持
2、備份方便,因?yàn)橹皇且粋€(gè)文件,只要復(fù)制一份該文件,就能備份整個(gè)數(shù)據(jù)庫(kù)
3、雖然是輕量級(jí)數(shù)據(jù)庫(kù),但他支持*** 2tb 的單個(gè)庫(kù)文件。
4、快,***的快。經(jīng)過(guò)實(shí)際測(cè)試,在幾百萬(wàn)記錄的情況下,sqlite的插入和查詢速度和 mysql 不分上下,快于 sql server,10倍于 access (但這并不意味著它可以替代 sql server )
用QT操作sqlite,由于sqlite屬于輕量級(jí)的數(shù)據(jù)庫(kù),不需要配置,不需要安裝,也不需要管理員,所以也就沒(méi)必要像操作mysql等數(shù)據(jù)庫(kù)一樣的設(shè)置主機(jī),用戶和密碼了。樣例如下:
- #include <QApplication>
 - #include <QTextEdit>
 - #include <QString>
 - #include <QSqlDatabase>
 - #include <QSqlQuery>
 - #include <QSqlError>
 - #include <QSqlDriver>
 - #include <QDateTime>
 - #include <QDebug>
 - int main(int argc, char *argv[])
 - {
 - QApplication app(argc, argv);
 - QTextEdit display;
 - display.resize(400, 160);
 - display.show(); //下面進(jìn)行數(shù)據(jù)庫(kù)的設(shè)置
 - QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //使用sqlite數(shù)據(jù)庫(kù)驅(qū)動(dòng)
 - db.setDatabaseName("test"); //我們之前建立的數(shù)據(jù)庫(kù)
 - bool ok = db.open(); //嘗試連接數(shù)據(jù)庫(kù)
 - if (ok)
 - { //這里用text已經(jīng)成功連上數(shù)據(jù)庫(kù)
 - QSqlQuery query; //新建一個(gè)查詢的實(shí)例
 - if (query.exec("select * from student")) //嘗試列出 student 表的所有記錄
 - { //本次查詢成功
 - int numRows = 0; //詢問(wèn)數(shù)據(jù)庫(kù)驅(qū)動(dòng),是否驅(qū)動(dòng)含有某種特性
 - if (db.driver()->hasFeature(QSqlDriver::QuerySize))
 - {
 - numRows = query.size(); //如果支持結(jié)果影響的行數(shù),那么直接記錄下來(lái)
 - }
 - else
 - {
 - query.last(); //否則定位到結(jié)果***,qt 文檔說(shuō),這個(gè)方法非常慢
 - numRows = query.at() + 1;
 - query.seek(-1);
 - }
 - QString name, age;
 - display.append("===========================================");
 - while(query.next())
 - { //定位結(jié)果到下一條記錄
 - name = query.value(0).toString();
 - age = query.value(1).toString();
 - QString result = name + " " + age;
 - display.append(result);
 - }
 - display.append("===========================================");
 - display.append(QString("totally %1 rows").arg(numRows) );
 - }
 - else
 - { //如果查詢失敗,用下面的方法得到具體數(shù)據(jù)庫(kù)返回的原因
 - QSqlError error = query.lastError();
 - display.append("From mysql database: " + error.databaseText());
 - }
 - }
 - else
 - { //打開(kāi)數(shù)據(jù)庫(kù)失敗,顯示數(shù)據(jù)庫(kù)返回的失敗描述
 - display.append("cannot open database.");
 - display.append("Reason: " + db.lastError().databaseText());
 - }
 - QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
 - return app.exec();
 - }
 
小結(jié):詳解 Qt 4訪問(wèn)Sqlite數(shù)據(jù)庫(kù)的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。















 
 
 

 
 
 
 