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);
}