1. 程式人生 > >Qt---自帶的資料庫QSQLITE

Qt---自帶的資料庫QSQLITE

database.h

#ifndef DATABASE_H
#define DATABASE_H

#include <QTextCodec>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QTime>
#include <QSqlError>
#include <QtDebug>
#include <QSqlDriver>
#include <QSqlRecord>

class DataBase
{
public:
    bool
createConnection(); //建立一個連線 bool createTable(); //建立資料庫表 bool insert(); //出入資料 bool queryAll(); //查詢所有資訊 bool updateById(int id); //更新 bool deleteById(int id); //刪除 bool sortById(); //排序 }; #endif // DATABASE_H

database.cpp

#include "database.h"


//建立一個數據庫連線
bool DataBase::createConnection()
{
    //
以後就可以用"sqlite1"與資料庫進行連線了 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "sqlite1"); db.setDatabaseName(".//qtDb.db"); if( !db.open()) { qDebug() << "無法建立資料庫連線"; return false; } return true; } //建立資料庫表 bool DataBase::createTable() { QSqlDatabase db = QSqlDatabase::database("sqlite1"
); //建立資料庫連線 QSqlQuery query(db); 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() << QObject::tr("資料庫表建立成功!\n"); return true; } else { qDebug() << QObject::tr("資料庫表建立失敗!\n"); return false; } } //向資料庫中插入記錄 bool DataBase::insert() { QSqlDatabase db = QSqlDatabase::database("sqlite1"); //建立資料庫連線 QSqlQuery query(db); query.prepare("insert into automobil values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); long records = 10; 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); bool success=query.exec(); if(!success) { QSqlError lastError = query.lastError(); qDebug() << lastError.driverText() << QString(QObject::tr("插入失敗")); return false; } } return true; } //查詢所有資訊 bool DataBase::queryAll() { QSqlDatabase db = QSqlDatabase::database("sqlite1"); //建立資料庫連線 QSqlQuery query(db); query.exec("select * from automobil"); QSqlRecord rec = query.record(); qDebug() << QObject::tr("automobil表字段數:" ) << rec.count(); while(query.next()) { for(int index = 0; index < 10; index++) qDebug() << query.value(index) << " "; qDebug() << "\n"; } } //根據ID刪除記錄 bool DataBase::deleteById(int id) { QSqlDatabase db = QSqlDatabase::database("sqlite1"); //建立資料庫連線 QSqlQuery query(db); query.prepare(QString("delete from automobil where id = %1").arg(id)); if(!query.exec()) { qDebug() << "刪除記錄失敗!"; return false; } return true; } //根據ID更新記錄 bool DataBase::updateById(int id) { QSqlDatabase db = QSqlDatabase::database("sqlite1"); //建立資料庫連線 QSqlQuery query(db); query.prepare(QString("update automobil set attribute=?,type=?," "kind=?, nation=?," "carnumber=?, elevaltor=?," "distance=?, oil=?," "temperature=? where id=%1").arg(id)); 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); bool success=query.exec(); if(!success) { QSqlError lastError = query.lastError(); qDebug() << lastError.driverText() << QString(QObject::tr("更新失敗")); } return true; } //排序 bool DataBase::sortById() { QSqlDatabase db = QSqlDatabase::database("sqlite1"); //建立資料庫連線 QSqlQuery query(db); bool success=query.exec("select * from automobil order by id desc"); if(success) { qDebug() << QObject::tr("排序成功"); return true; } else { qDebug() << QObject::tr("排序失敗!"); return false; } }

main.cpp

#include <QCoreApplication>
#include "database.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());

    DataBase d;
    d.createConnection();  //建立連線
    //d.createTable();
    //d.insert();
    d.queryAll();          //已經完成過createTable(), insert(), 現在進行查詢

    return 0;
}

執行結果

這裡寫圖片描述

專案名稱為”sqlex”,然後就可以在與當前專案同一級目錄下的“build-SQLEx-Desktop_Qt_5_7_0_MinGW_32bit-Debug”中可以看到qtDb.db資料庫檔案,該資料庫可以用軟體SQLite直接開啟