SqliteDataAccess QT

class SqliteDataAccess
{
public:
    SqliteDataAccess(QString dbPath = QString(":memory:"));
    ~SqliteDataAccess();
 
    bool ExecuteSelect(QSqlQuery & q, QString & selectSql);
 
    int ExecuteNoSelect(QString & selectSql);
 
    const QString & GetDbPath() {return m_dbPath;}
 
private:
    QSqlDatabase m_db;
    QString m_dbPath;
};
 
void SqliteDataAccess_Test();


#include "SqliteDataAccess.h"

 
#include <QSqlError>
#include <QSqlQuery>
#include "Log.h"
SqliteDataAccess::SqliteDataAccess(QString dbPath)
    :m_dbPath(dbPath)
{
    m_db = QSqlDatabase::database(dbPath);
    if(m_db.isValid() == false)
    {
        m_db = QSqlDatabase::addDatabase("QSQLITE", dbPath);
    }
    if(m_db.databaseName() != dbPath)
        m_db.setDatabaseName(dbPath);
}
 
SqliteDataAccess::~SqliteDataAccess()
{
    if(m_db.isOpen())
    {
            m_db.close();
    }
}
 
bool SqliteDataAccess::ExecuteSelect(QSqlQuery & q, QString & selectSql)
{
    if(m_db.isOpen() == false)
    {
        if(m_db.open() == false)
        {
            SU_ERROR("db open failed!\n");
            QSqlError e = m_db.lastError();
            SU_ERROR("detail error: [%d] [%s] ", e.type(), e.text().toAscii().constData());
            return false;
        }
    }
    QSqlQuery iq(m_db);
    if(iq.exec(selectSql) == true)
    {
        q = iq;
        return true;
    }
    SU_ERROR("execute sql Error\n");
    QSqlError e = iq.lastError();
    SU_ERROR("detail error: [%d] [%s] ", e.type(), e.text().toAscii().constData());
    return false;
}
 
int SqliteDataAccess::ExecuteNoSelect(QString & noSelSql)
{
    if(m_db.isOpen() == false)
    {
        if(m_db.open() == false)
        {
            SU_ERROR("db open failed!\n");
            QSqlError e = m_db.lastError();
            SU_ERROR("detail error: [%d] [%s] ", e.type(), e.text().toAscii().constData());
            return -1;
        }
    }
    QSqlQuery iq(m_db);
    if(iq.exec(noSelSql) == true)
    {
        return iq.numRowsAffected ();
    }
    SU_ERROR("execute sql Error\n");
 
    QSqlError e = iq.lastError();
    SU_ERROR("detail error: [%d] [%s] ", e.type(), e.text().toAscii().constData());
 
    return -1;
}
 

void SqliteDataAccess_Test()
{
    SqliteDataAccess dao;
 
    int ret = -1;
    QString tabSql = "create table person (id int primary key, name varchar(20), address varchar(200), typeid int)";
    ret = dao.ExecuteNoSelect(tabSql);
    if(ret == -1)
    {
        SU_ERROR("execurte error!\n");
        return ;
    }
    SU_INFO("create a table inf memory!");
 
    QString insSql = "insert into person values(2, 'Alice', '123 Main Stree tMarket Town', 101)";
    ret = dao.ExecuteNoSelect(insSql);
    if(ret < 0)
    {
        SU_ERROR("execute error!");
        return ;
    }
    SU_INFO("insert success!");
 
    QSqlQuery q;
    QString selSql = "select * from person";
    if(dao.ExecuteSelect(q, selSql) == false)
    {
        SU_ERROR("select record error!");
        return ;
    }
    SU_INFO("select a table 's all value!!");
    // Print(q);
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值