#ifndef DBUTIL_H
#define DBUTIL_H
#include <QSqlDatabase>
#include <QString>
/**
* database util
*/
class DBUtil
{
public:
DBUtil();
~DBUtil();
public:
void close();
bool insert_data(
const QString& sql_str);
void update_data(
const QString& sql_str);
QMap<QString, QString> select_line_data(
const QString& sql_str);
// select many row data
QVector<QMap<QString, QString> >
select_data(
const QString& sql_str);
bool select_exist(
const QString& sql_str);
void delete_data(
const QString& sql_str);
private:
bool connect();
private:
QString get_database_name();
private:
QSqlDatabase d_db;
};
#endif // DBUTIL_H
#include "DBUtil.h"
#include "DBConstant.h"
#include "GLOBAL/util/CommonFileUtil.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QDebug>
DBUtil::DBUtil()
{
}
DBUtil::~DBUtil()
{}
void
DBUtil::close()
{
}
QString
DBUtil::get_database_name()
{
return CommonFileUtil::get_db_dir() + "/" + DBConstant::c_SQLITE3_DATABASE_NAME;
}
bool
DBUtil::connect()
{
d_db = QSqlDatabase::database();
d_db.setDatabaseName(get_database_name());
if( !d_db.open() )
{
qDebug() << __FILE__ << __LINE__ << "warning: database not connect. " << d_db.lastError() << "\n";
return false;
}
return true;
}
bool
DBUtil::insert_data(
const QString& sql_str)
{
const bool& c_ok = connect();
if( !c_ok )
{
return false;
}
QSqlQuery q;
bool ok = q.exec(sql_str);
if( !ok )
{
qDebug() << __FILE__ << __LINE__ << " error: " << q.lastError() << "\n";
}
q.clear();
d_db.close();
return ok;
}
void
DBUtil::update_data(
const QString& sql_str)
{
const bool& c_ok = connect();
if( !c_ok )
{
return;
}
QSqlQuery q;
q.exec(sql_str);
q.clear();
d_db.close();
}
QMap<QString, QString>
DBUtil::select_line_data(
const QString& sql_str)
{
QMap<QString, QString> map_result_data;
const bool& c_ok = connect();
if( !c_ok )
{
return map_result_data;
}
QSqlQuery q;
if( !q.exec(sql_str) )
{
d_db.close();
return map_result_data;
}
if( q.next() )
{
for(int i = 0; i < q.record().count(); i++)
{
//qDebug() << __FILE__ << __LINE__ << " i = " << i;
map_result_data[q.record().fieldName(i)] = q.value(i).toString();
}
}
q.clear();
d_db.close();
//qDebug() << __FILE__ << __LINE__ << " map_result_data = " << map_result_data;
return map_result_data;
}
QVector<QMap<QString, QString> >
DBUtil::select_data(
const QString& sql_str)
{
QVector<QMap<QString, QString> > result_data;
const bool& c_ok = connect();
if( !c_ok )
{
return result_data;
}
QSqlQuery q;
if( !q.exec(sql_str) )
{
d_db.close();
return result_data;
}
QMap<QString, QString> column_data;
while( q.next() )
{
for(int i = 0; i < q.record().count(); i++)
{
column_data[q.record().fieldName(i)] = q.value(i).toString();
}
result_data.push_back(column_data);
}
//qDebug() << __FILE__ << __LINE__ << "select_data result_data = " << result_data;
q.clear();
d_db.close();
return result_data;
}
bool
DBUtil::select_exist(
const QString& sql_str)
{
// const QVector<QMap<QString, QString> >& data = select_data(sql_str);
// return (!data.empty());
const bool& c_ok = connect();
if( !c_ok )
{
qDebug() << __FILE__ << __LINE__ << "warning: database not connect.";
return false;
}
QSqlQuery q;
if( !q.exec(sql_str) )
{
d_db.close();
return false;
}
if( q.next() && (q.record().count() > 0) )
{
return true;
}
return false;
}
void
DBUtil::delete_data(
const QString& sql_str)
{
const bool& c_ok = connect();
if( !c_ok )
{
return;
}
QSqlQuery q;
q.exec(sql_str);
d_db.close();
}
一时之间,发现写了很多小练习的代码_