1. 程式人生 > 資料庫 >Qt筆記——SQLite初探QSqlDatabase QSqlQuery

Qt筆記——SQLite初探QSqlDatabase QSqlQuery

先記錄一個奇怪的問題:

按照官網手冊:

會出現連線成功但建立失敗的問題

不知道為啥……更改一下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();
}