封装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 ...
随机推荐
- Pager
jQuery var Pager = function (ops) { this._ops = { count: ops.count || 0, selectedIndex: ops.selected ...
- redis学习(二)
深入了解redis字符串,列表,散列和有序集合命令,了解发布,订阅命令和其他命令. 一,字符串 1.字符串可以存储3种类型的值 字符串,整数,浮点数 2.运算命令列表 incr : incr ...
- mysql驱动表与被驱动表及join优化
驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当 ...
- [Vim] 01 凡人操作
历史评价 编辑器之神 一个凡人的自我修养 成神是不可能成神的,只能是先入个门,然后一点一点学 Vim 官网 三种模式 插入模式(注意看光标) 命令模式(注意看光标) 编辑模式(注意看光标) 其实还有一 ...
- [2019沈阳网络赛D题]Dawn-K's water(点分治)
题目链接 题意为求出树上任意点对的距离对3取余的和. 比赛上听到题意就知道是点分治了,但是越写越不对劲,交之前就觉得会T,果不其然T了.修修改改结果队友写了发dp直接就过了Orz. 赛后想了想维护的东 ...
- 取(2堆)石子游戏 HDU 2177 博弈论
取(2堆)石子游戏 HDU 2177 博弈论 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中 ...
- qtreewidget 显示保存xml文件
此文是读取和存储已知结构的xml,对于未知结构的xml,可以用递归方法读取和遍历.可参考文章:Qt遍历不规则树的节点. 1.QTreewidget设置 //折叠图标(三角图标)换成自定义图标 ui-& ...
- 题解 CF292A 【SMSC】
蒟蒻本想发一篇黑题题解,没想到黑题竟然掉紫了QwQ. 趁着题解还只有几篇,赶紧来发一篇嘿嘿嘿. 这道题其实很简单,题解其实都不需要 AC代码: #include<bits/stdc++.h> ...
- [LeetCode] 108. 将有序数组转换为二叉搜索树
题目链接 : https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/ 题目描述: 将一个按照升序排列的 ...
- MySQL---数据库切分
3.切分 水平切分 水平切分又称为sharding,它是将同一个表的记录拆分到多个结构相同的表中.当一个表的数据不断的增加的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上, ...