封装Qt的SQLite接口类
还没测试完善。。
#ifndef SQLITE_H
#define SQLITE_H #include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QMap>
#include <QInternal>
#include <QString>
#include <QDebug> class Sqlite
{
QSqlDatabase db;
QString host_name; //主机名
QString user_name; //用户名
QString pwd; //密码
QString db_file_name; //数据库文件名
QSqlError error;
QSqlQuery *query;
QSqlRecord rec;
public:
Sqlite(QString m_file_name,QString m_host_name,QString m_user_name,QString m_pwd);
~Sqlite();
bool create_table(QString table_name,QMap<QString,QString> table_data); //新建表
int db_query(QString m_query_sql); //发送数据库语句
int add(QString table_name,QMap<QString,QString> data); //增加数据
int del(QString table_name,QMap<QString,QString> where); //删除一条记录
int updata(QString table_name,QMap<QString,QString> where,QMap<QString,QString> data); //更新数据
int find(QString table_name,QList<QString> key,QMap<QString,QString> where,QList<QList<QString>> *row); //查找
int find(QString table_name,QList<QString> key,QList<QList<QString>> *row); //查找所有
QString getError();
}; #endif // SQLITE_H
sqlite.cpp
#include "sqlite.h" Sqlite::Sqlite(QString m_file_name,QString m_host_name,QString m_user_name,QString m_pwd)
{
host_name=m_host_name;
user_name=m_user_name;
pwd=m_pwd;
db_file_name=m_file_name;
db=QSqlDatabase::addDatabase("QSQLITE");
query=new QSqlQuery(db);
db.setHostName(host_name);
db.setUserName(user_name);
db.setPassword(pwd);
db.setDatabaseName(db_file_name);
if(!db.open())
{
qDebug()<<"database open error.";
error = db.lastError();
}
} /*
*
* create_table函数:创建数据库表
* table_name:表名
* table_data:表项 名->属性
*
*/ bool Sqlite::create_table(QString table_name,QMap<QString,QString> table_data)
{
QSqlQuery query;
QString sql="create table "+table_name+" (";
for(QMap<QString,QString>::const_iterator i=table_data.constBegin();i!=table_data.constEnd();i++)
{
sql+=i.key()+' '+i.value();
if(i!=table_data.constEnd())
sql+=',';
}
sql.chop();
sql+=")";
qDebug()<<sql;
query.prepare(sql);
return query.exec();
} /*
* 向数据库中增加数据
*/ int Sqlite::add(QString table_name, QMap<QString, QString> data)
{
QString sql="insert into "+table_name+ "(";
QString values=" values(";
for(QMap<QString,QString>::const_iterator i=data.constBegin();i!=data.constEnd();i++)
{
sql+=i.key()+", ";
values+=i.value()+", ";
}
sql.chop();
values.chop();
sql+=")";
values+=")";
sql+=values;
qDebug()<<sql;
query->prepare(sql);
return query->exec();
} /*
* 向数据库发送一条语句
*/ int Sqlite::db_query(QString m_query_sql)
{
query->prepare(m_query_sql);
return query->exec();
} /*
* 删除一条记录
*/ int Sqlite::del(QString table_name, QMap<QString, QString> where)
{
QString sql="delete ";
sql+=table_name;
sql+=" where ";
for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
{
sql+=i.key()+"=";
sql+="'"+i.value()+"' ";
}
sql.chop();
query->prepare(sql);
return query->exec();
} /*
* 修改数据库记录
*/
int Sqlite::updata(QString table_name, QMap<QString, QString> where, QMap<QString, QString> data)
{
QString sql="updata "+table_name+" set";
for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
{
sql+=i.key()+"=";
sql+=i.value()+" ";
}
sql+="where ";
for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
{
sql+=i.key()+"=";
sql+=i.value()+" ";
}
return query->exec();
} /*
* 查找所有记录
*/ int Sqlite::find(QString table_name,QList<QString> key,QList<QList<QString>> *row)
{
QString sql="select ";
int len=key.size();
for(int i=;i<len;i++)
{
sql+=key.at(i);
sql+=",";
}
sql.chop();
sql+=" from "+table_name;
//qDebug()<<sql;
query->prepare(sql);
if(query->exec())
{
while (query->next()) {
QList<QString> j;
for(int i=;i<len;i++)
{
j.append(query->value(i).toString());
}
row->append(j);
}
return ;
}
else return ;
} int Sqlite::find(QString table_name, QList<QString> key, QMap<QString, QString> where, QList<QList<QString> > *row)
{
QString sql="select ";
int len=key.size();
for(int i=;i<len;i++)
{
sql+=key.at(i);
sql+=",";
}
sql.chop();
sql+=" from "+table_name;
sql+=" where ";
for(QMap<QString,QString>::const_iterator i=where.constBegin();i!=where.constEnd();i++)
{
sql+=i.key()+"="+i.value()+",";
}
sql.chop();
//qDebug()<<sql;
query->prepare(sql);
if(query->exec())
{
while (query->next()) {
QList<QString> j;
for(int i=;i<len;i++)
{
j.append(query->value(i).toString());
}
row->append(j);
}
return ;
}
else return ;
} /*
* 获取错误信息
*/ QString Sqlite::getError()
{
return error.text();
} Sqlite::~Sqlite()
{
db.close();
}
封装Qt的SQLite接口类的更多相关文章
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...
- python学习之老男孩python全栈第九期_day025知识点总结——接口类、抽象类、多态、封装
一. 接口类 java:面向对象编程 设计模式 -- 接口类 接口类:python原生不支持 抽象类:python 原生支持的 from abc import abstractclassmethod, ...
- 抽象类,接口类,封装,property,classmetod,statimethod
抽象类,接口类,封装,property,classmetod,statimethod(类方法,静态方法) 一丶抽象类和接口类 接口类(不崇尚用) 接口类:是规范子类的一个模板,只要接口类中定义的,就应 ...
- python day - 19 抽象类 接口类 多态 封装
一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...
- Python进阶-XVII 非python的接口类、多态、python自己的封装
1.python模拟java中的接口类 python中是没有接口类的概念的,因为它支持多继承,但是java不能,所以就提出一个接口类的概念 java : 面向对象编程 设计模式 —— 接口 接口类 : ...
- python笔记5 接口类抽象类 封装 反射 设计模式 模块 :random随机数 josn shelve持久化存储
接口类抽象类 接口类:接口类就是制定一个规则,让其他人按照我的规则去写程序. #!/usr/bin/env python from abc import ABCMeta,abstractmethod ...
- Python_015(面向对象(接口类,抽象类,多态,封装)
一.抽象类与接口类 1.抽象类:抽象即类似或者说比较像的部分,继承描述的是父类与子类的一种关系,要找出这种关系,必须先抽象再继承; a:抽象分成两个层次: 1)由对象->类:将两个有相似地方的对 ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
随机推荐
- Jmeter JDBC请求---把数据库结果参数化传递到其他请求
摘要: 最近一个场景进行压力测试:生成商品id进行上下架和购买,记录写脚本的一个过程 1.在商品上架前需要准备商品ID,商品ID生成需要从数据库读取商品类别,从而生成商品ID,下面是从数据库:读取商品 ...
- win10安装Tensorflow1.9GPU版本
前言 看到DateWhale出了一篇安装教程(微信公众号DateWhale),决定体验一下Tensorflow1.9的GPU版本..其实一开始装的是2.0,但是tf.Session()就报错了,说是2 ...
- /proc/cpuinfo 查看cpu信息
/proc/cpuinfo 查看cpu信息 如类型.厂家.型号
- 关于连接池和DBUtils
1.关于数据库连接池 连接池就是创建和管理一个连接缓冲池的技术,这些连接好被任意线程所使用,数据库连接池负责分配和管理.释放数据库连接,总而言之数据库连接池就是提高对数据库的操作性能. 数据库连接池: ...
- CentOS7搭建NTP服务器及客户端同步时间
一.服务器配置 1.查看服务器.客户端操作系统版本 [root@hadoop101 ~]# cat /etc/redhat-release CentOS Linux release (Core) 2. ...
- gcc编译工具生成动态库和静态库
一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...
- glVertexAttribPointer 顶点数据解析方式
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); 第一个参数指定从索引0开始取数据,与顶点着色器中layout(location=0)对应. ...
- bzoj4103 [Thu Summer Camp 2015]异或运算(可持久化trie)
内存限制:512 MiB 时间限制:1000 ms 题目描述 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi ...
- vue中获取滚动table的可视页面宽度,调整表头与列对齐(每列宽度不都相同)
mounted() { // 在mounted中监听表格scroll事件 this.$refs.scrollTable.addEventListener( 'scroll',(event) => ...
- hdu 4633 Who's Aunt Zhang(polya+逆元)
Who's Aunt Zhang Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...