Qt筆記——SQLite初探QSqlDatabase QSqlQuery
阿新 • • 發佈:2020-01-31
先記錄一個奇怪的問題:
按照官網手冊:
會出現連線成功但建立失敗的問題
不知道為啥……更改一下setDataName就ok了??也許是customdb這個名字不能使用??qtDB.db也不能使用!換成其他名字就好了
效果圖:
main.cpp
#include <QCoreApplication> #include <QTextCodec> #include <QSqlDatabase> #include <QSqlQuery> #include <QTime> #include <QSqlError> #include <QtDebug> #include <QSqlDriver> #include <QSqlRecord> #include <QString> int main(int argc,char *argv[]) { QCoreApplication a(argc,argv); QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());//設定中文顯示 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//建立資料庫 // db.setDatabaseName("cashsystem.db"); db.setHostName("easybook-3313b0");//設定資料庫主機名 db.setDatabaseName("qt.db");//設定資料庫名 db.setUserName("xdu_caijia");//設定使用者名稱 db.setPassword("wangqiang.");//設定密碼 bool ok = db.open();//開啟連結 if(ok){ qDebug()<<QStringLiteral("成功開啟連結"); }else{ qDebug()<<QStringLiteral("開啟連結失敗!"); } //建立資料庫表 QSqlQuery query; bool success=query.exec("create table automobil(id int primary key,attribute varchar,type varchar,kind varchar,nation int,carnumber int,elevaltor int,distance int,oil int,temperature int)"); if(success) qDebug()<<QStringLiteral("資料庫表建立成功!"); else qDebug()<<QStringLiteral("資料庫表建立失敗!"); //查詢 query.exec("select * from automobil"); QSqlRecord rec = query.record(); qDebug() << QStringLiteral("automobil表字段數:" )<< rec.count(); //插入記錄 QTime t; t.start(); query.prepare("insert into automobil values(?,?,?)"); long records=100; for(int i=0;i<records;i++) { query.bindValue(0,i); query.bindValue(1,"四輪"); query.bindValue(2,"轎車"); query.bindValue(3,"富康"); query.bindValue(4,rand()%100); query.bindValue(5,rand()%10000); query.bindValue(6,rand()%300); query.bindValue(7,rand()%200000); query.bindValue(8,rand()%52); query.bindValue(9,rand()%100); success=query.exec(); if(!success) { QSqlError lastError=query.lastError(); qDebug()<<lastError.driverText()<<QString(QStringLiteral("插入失敗")); } } qDebug()<<QStringLiteral("插入 %1 條記錄,耗時:%2 ms").arg(records).arg(t.elapsed()); //排序 t.restart(); success=query.exec("select * from automobil order by id desc"); if(success) qDebug()<<QStringLiteral("排序 %1 條記錄,耗時:%2 ms").arg(records).arg(t.elapsed()); else qDebug()<<QStringLiteral("排序失敗!"); //更新記錄 t.restart(); for(int i=0;i<records;i++) { query.clear(); query.prepare(QString("update automobil set attribute=?,type=?," "kind=?,nation=?," "carnumber=?,elevaltor=?," "distance=?,oil=?," "temperature=? where id=%1").arg(i)); query.bindValue(0,"四輪"); query.bindValue(1,"轎車"); query.bindValue(2,"富康"); query.bindValue(3,rand()%100); query.bindValue(4,rand()%10000); query.bindValue(5,rand()%300); query.bindValue(6,rand()%200000); query.bindValue(7,rand()%52); query.bindValue(8,rand()%100); success=query.exec(); if(!success) { QSqlError lastError=query.lastError(); qDebug()<<lastError.driverText()<<QString(QObject::tr("更新失敗")); } } qDebug()<<QStringLiteral("更新 %1 條記錄,耗時:%2 ms").arg(records).arg(t.elapsed()); //刪除 t.restart(); query.exec("delete from automobil where id=15"); qDebug()<<QStringLiteral("刪除一條記錄,耗時:%1 ms").arg(t.elapsed()); return 0; //return a.exec(); }