Qt 中使用SQLite

SQLite是一个轻量级的文件型数据库,非常小巧而几乎被各大操作系统平台默认支持,支持使用标准的SQL 查询语句对数据库进行操作。Qt 直接提供了对其的引擎无需额外安装LIB ;这次的项目也用到了它。


#ifndef SQLITEFUNT_H
#define SQLITEFUNT_H
#include <QDebug>
#include <QList>
#include <QSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include "inforecord.h"


class SQLiteFunt
{
public:

    SQLiteFunt( QString fullPath  );

private:
    QSqlDatabase m_dbconn;
    void initDBTable( QString TableName  );
public:
    void SetBaseInfo( QString username, QString department  );
    BaseInfoStruct GetBaseInfo();
    void AddUPInfoLog( int status ,QString logtext  );

};

#endif // SQLITEFUNT_H


#include "sqlitefunt.h"

#define LOGTABLENAME   "InfoLogLocal3"
#define LOGMAXCOUNT    1000


SQLiteFunt::SQLiteFunt( QString fullPath ){

    m_dbconn = QSqlDatabase::addDatabase("QSQLITE");

    m_dbconn.setDatabaseName( fullPath );

    if(!m_dbconn.open()){

        qDebug()<<"open "<<fullPath<<" failed!";

    }else{

        QSqlQuery query( m_dbconn );

        QString TableName = LOGTABLENAME;
        QString  sql = "select count(*) from sqlite_master where type='table' and name='"+ TableName +"'";;

        if(  query.exec( sql ) ){

            if( query.next() ){

               if ( query.value(0).toInt() == 1){

                   qDebug() << "表已存在....";

               }else{

                   qDebug() << "表不存在....";

                   initDBTable( TableName );
               }

            }
        }

        query.finish();
    }
}

/**
* 初始化表
*/


void SQLiteFunt::initDBTable( QString TableName ){

    qDebug() << "initDBTable() " ;

    QSqlQuery sql_query( m_dbconn );
    QString create_sql = "create table "+ TableName +" ( id    integer PRIMARY KEY autoincrement,"
                                                      "dtime    timestamp not null default (datetime('now','localtime')),"
                                                      "status   int,"
                                                      "log TEXT)";

    if ( ! sql_query.exec( create_sql ) ){

        qDebug() << "Error SQLiteFunt::initDBTable()";
    }


    create_sql = "create table  setupInfo  ( id   integer PRIMARY KEY autoincrement,"
                                                      "username vachar(20),"
                                                      "department vachar(20))";

    if ( ! sql_query.exec( create_sql ) ){

        qDebug() << "Error SQLiteFunt::initDBTable()";
    }

    QString sql ="insert into setupInfo ( id,username,department ) values( 0,'未命名','未命名');";

    qDebug() << sql;

    if ( ! sql_query.exec( sql ) ){

        qDebug() << "Error : " << sql;
    }

    sql_query.finish();

}



BaseInfoStruct SQLiteFunt::GetBaseInfo(){

    QSqlQuery query( m_dbconn );

    QString sql ="select * from setupInfo where id = 0;";

    query.exec( sql );

    BaseInfoStruct baseInfo;

    if( query.next() ){

       baseInfo.username = query.value("username").toString();
       baseInfo.department = query.value("department").toString();


    }
    query.finish();
    return baseInfo;
}


void SQLiteFunt::SetBaseInfo( QString username, QString department  ){

    QSqlQuery query( m_dbconn );

    QString sql ="update setupInfo set username ='"+  username +"',department = '"+ department +"' where id = 0";

    qDebug() << sql ;
    if ( ! query.exec( sql ) ){

        qDebug() << "Error : " << sql;
    }
    query.finish();
}



void SQLiteFunt::AddUPInfoLog( int status ,QString logtext  ){

    QSqlQuery query( m_dbconn );

    QString TableName = LOGTABLENAME;
    QString sql = "";

    if ( status < 0 ){
        /** 发送失败*/
        sql = "insert into "+ TableName +" ( status,log ) values("+ QString::number( status,10) +",'"+ logtext +"');";
    }else{
        /** 发送成功*/
        //sql = "insert into "+ TableName +" ( status,log ) values("+ QString::number( status,10) +",'"+ logtext +"');";
    }

    qDebug() << sql;

    if ( ! query.exec( sql ) ){

        qDebug() << "Error : " << sql;
    }

    query.finish();

}