简单通用数据访问层
来源:互联网 发布:java在数据库中写的表 编辑:程序博客网 时间:2024/04/28 17:15
#ifndef DATAACCESS_H
#define DATAACCESS_H
#include <QStandardItemModel>
#include <QSqlDatabase>
class QDac
{
public:
QDac();
~QDac();
void InitDatabase();
void UninitDataBase();
void exec(const QString &request,QAbstractItemModel &model,bool isCmd = true);
void submit(const QString &request,const QAbstractItemModel &model,int effictRow,bool isCmd = true);
//int genId(const QString &tableName);
protected:
void Load(const QString &sql, QAbstractItemModel &model);
};
int genId(const QString &tableName);
#endif // DATAACCESS_H
#include "dataaccess.h"
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QDebug>
#include <QApplication>
#include <QSqlTableModel>
#include "qdam.h"
QDac::QDac()
{
}
QDac::~QDac()
{
}
void QDac::InitDatabase()
{
QString path = QApplication::applicationDirPath();
path += "/posionData.s3db";
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(path);
if(!db.open())
{
qDebug() << "open db error!";
}
}
void QDac::UninitDataBase()
{
}
void QDac::Load(const QString &sql, QAbstractItemModel &model)
{
model.removeRows(0,model.rowCount());
model.removeColumns(0,model.columnCount());
//model.r
QSqlQuery query(sql);
if(query.exec())
{
int n = query.record().count();
model.insertColumns(0,n);
int row = 0;
while(query.next())
{
model.insertRow(row);
for(int col=0; col<n; col++)
{
model.setData(model.index(row,col),query.value(col));
}
row++;
}
}
else qDebug() << query.lastError().text();
}
void QDac::exec(const QString & request, QAbstractItemModel &model, bool isCmd)
{
QDam * dam = QDam::getInstance();
if(dam)
{
if(isCmd)
{
QString str = dam->mapCmd(request);
Load(str,model);
}
else
{
QString str = dam->mapAction(request);
Load(str,model);
}
}
}
void QDac::submit(const QString &request,const QAbstractItemModel &model,int effictRow,bool isCmd)
{
QDam * dam = QDam::getInstance();
if(dam)
{
QString sql;
if(isCmd)sql = dam->mapCmd(request);
else sql = dam->mapAction(request);
int n = model.columnCount();
QSqlQuery query;
query.prepare(sql);
for(int i=0; i<n; i++)
{
QModelIndex idx = model.index(effictRow,i);
query.bindValue(i,idx.data());
}
if(!query.exec())qDebug() << "submit error : " << query.lastError().text();
}
}
int genId(const QString &tableName)
{
/*
QString sql = QString("select maxId from TableIndex where namne = %0").arg(tableName);
QSqlQuery query(sql);
if(query.exec())
{
if(query.size() > 0)
{
query.next();
int id = query.value(0).toInt();
id++;
sql = QString("update TableIndex set maxId = %0 where name = %1").arg(id).arg(tableName);
QSqlQuery update(sql);
update.exec();
return id;
}
}
else qDebug() << query.lastError().text();
//else
{
sql = QString("insert into TableIndex values(%0,%1)").arg(tableName).arg(100);
QSqlQuery insert(sql);
if(insert.exec())return 100;
qDebug() << insert.lastError().text();
}
*/
QSqlTableModel model;
model.setTable("RecordIndex");
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.select();
for(int i=0; i<model.rowCount(); i++)
{
QModelIndex idx = model.index(i,0);
if(idx.data().toString() == tableName)
{
idx = model.index(i,1);
int id = idx.data().toInt();
id++;
model.setData(idx,id);
model.submitAll();
return id;
}
}
int n = model.rowCount();
model.insertRow(n);
model.setData(model.index(n,0),tableName);
model.setData(model.index(n,1),100);
model.submitAll();
return 100;
}
0 0
- 简单通用数据访问层
- 简单通用数据访问映射层
- 通用数据访问层--SQLServer版
- 通用数据访问层--Access版
- 通用数据访问层--SQLServer版
- 【转】通用数据访问层--SQLServer版
- 【转】通用数据访问层--Access版
- Java通用数据访问层 Uncode-DAL
- Java通用数据访问层Fastser-DAL推荐
- 采用Hibernate的简单数据访问层
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
- 基于Spring4+Hibernate4的通用数据访问层(Dao层)设计与实现!
- 基于Spring4+Hibernate4的通用数据访问层(Dao层)设计与实现!
- 编写通用数据访问
- 一个简单的NET数据访问层操作类
- 使用JDBC构建简单的数据访问层
- SQLServer数据层通用类
- 写了个基于sqlhelper和oracleHelper的通用数据访问层
- curl命令结果不显示统计信息% Total % Received %
- Android WebView开发问题及优化汇总
- Hive安装配置
- MongoDB学习笔记(一) MongoDB介绍及安装
- (hdu step 5.2.3)Phone List(在一堆号码中,判断是否有号码是其它号码的前缀)
- 简单通用数据访问层
- Monkey源码分析番外篇之WindowManager注入事件如何跳出进程间安全限制
- 欢迎使用CSDN-markdown编辑器
- 火狐iframe的src属性更改后onblur失效问题
- BUFSIZ定义及作用
- const 与 #define的区别
- IaaS, PaaS和SaaS公司都做些什么
- JAVA 子类方法签名相同 返回类型不同
- URAL 1296. Hyperjump(最大子序列和)