封装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 ...
随机推荐
- C语言实现单链表
大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解指针与结构体的运用.废话不多说,上代码! 初始化 typedef struct Node { int data ...
- (3.5)常用知识-NULL与零长度、字符串尾部填充空格
概述:NULL与零长度是不同的,NULL表示数据未知或不可用,它是与零(数值或2进制).零长度字符串不 同的一种值,也可以理解为一种状态. 即可以理解为:所有的变量都有2种状态,一种有值,一种为NUL ...
- MyEclipse img显示问题
MyEclipse第一个例子,通过HTML的img显示图片,费两天的功夫,故作简单整理,图片2不显示根本原因还是src的路径不对. 选中project中的sr.jpg文件,运行查看浏览器显示的地址,此 ...
- java中Map的put函数和get函数用法
---内容开始--- 没有比较完整的说明他们的用法,一般就只能看源函数,但是看起来比较的费劲. 那么究竟put函数和get函数的用法是如何的呢? 当然java中的Map集合是有Key和Value的. ...
- Selenium1.0与2.0介绍
Selenium的实现原理 首先,你要明确刚才建立的测试用例是基于Selenium 2.0,也就是Selenium + WebDriver的方案.其次,你需要知道,对Selenium而言,V1.0和V ...
- jQuery之链式编程
使用的思想:隐式迭代. <button>快速</button> <button>快速</button> <button>快速</but ...
- 深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)
目录: 1.经典的卷积层是如何计算的 2.分析卷积层的计算量 3.分析卷积层的参数量 4.pytorch实现自动计算卷积层的计算量和参数量 1.卷积操作如下: http://cs231n.github ...
- 使用阿里ARouter路由实现组件化(模块化)开发流程
Android平台中对页面.服务提供路由功能的中间件,我的目标是 —— 简单且够用. 这是阿里对Arouter的定位,那么我们一起来梳理一下Arouter使用流程,和使用中我所遇到的一些问题! 先来看 ...
- java程序员究竟应该掌握点什么
JAVA程序设计(基础部分) JAVA程序设计(专题)
- 软件包管理(rpm、yum、dpkg)
一. 大多数Linux应用软件包的命名也有一定的规律,它遵循:名称-版本-修正版-类型,通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz.以源码 ...