封装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 ...
随机推荐
- Java ——继承
本节重点思维导图 面向对象三大特性:封装.继承.多态 面向对象编程的第一原则:面向接口编程 继承 代码利用的方式,子类与父类之间的关系 语法 访问控制修饰符 class 类名 extends父类名{ ...
- python string_3 end 内建函数详解
以下方法,是在python2上运行的,编码也使用的是python2, 在对比python3后,发现,基本相同,也就是说在print后补上(),使用函数方式,是可以在python3下运行的, 删除了针对 ...
- 深入理解Linux-hostname
当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问题给我好好上了一课,很多知识点,当你觉得你已经掌握的时候,其实你了解的还只是皮毛.技术活,切勿浅尝则止! ...
- MAC_BOOKPRO苹果电脑系统常用快捷键大全
Mac 键盘快捷键 我在品多多上拼的Mac终于到货了,安全下车,接下来要熟练使用了! 您可以按下某些组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作. 要使用键盘快捷键,请按住一个或多 ...
- gcc 消除未使用变量的警告
我们写代码的时候经常需要遇到一些情况,参数暂时没用到.但是这个参数必须存在. 例如linux下线程实体函数void *thread_xx(void *arg)如果不处理,gcc编译时就会报" ...
- 使用CyclicBarrier+线程池,按总页数分批次开多线程执行逻辑
通过CyclicBarrier+线程池的方式,同步的方式分页分批次并发高效处理逻辑,将总页数分成多个批次并发执行每页逻辑,每个批次处理DO_MAX_SIZE个页,每个批次等待DO_MAX_SIZE个页 ...
- Linux命令学习之两个小技巧(1)
本篇主要想讲两个小技巧.本来技巧之类的话应该放在学完整个东西之后或者在学习中遇到时再说的,但是这两个技巧其实很简单,很多人只要我一提就知道了.与其说是技巧,不如说是注意事项. 自动补全 在Linux终 ...
- 嵌入式软件工程师C语言经典笔试2
1. 使用宏定义swap函数,不使用中间变量 #define swap(x,y) {(x) = (x) + (y);(y) = (x) - (y);(x) = (x) - (y)} 2. 实现字符串的 ...
- Elastic Search安装-windows
转载自:https://blog.csdn.net/linkkb/article/details/82805145 其中稍作修改 ElasticSearch介绍 ES是一个基于Lucene的分布式全文 ...
- java中遍历实体类属性和类型,属性值
public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...