赞
踩
目录
3.2 多表联合查询 join on 图片格式jpg,png
主要有三个表格,其中images存的是照片,关键字都是user,可以通过user来多表联合查询
建立的DataBase文件为c++类型,继承自QObject
在pro里面 QT += core gui sql
#include <QObject>
#include <QMap>
#include <QMessageBox>
#include <QSettings>
#include <QSqlError>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QBuffer>
注意:在构造函数里面调用create_database(),必须先连接数据库才能对数据进行操作。
- // 创建数据库,连接数据库
- void Database::create_database()
- {
- QSqlDatabase db;
- // 避免重复连接数据库
- if(QSqlDatabase::contains("qt_sql_default_connection")) {
- db = QSqlDatabase::database("qt_sql_default_connection");
- } else {
- db = QSqlDatabase::addDatabase("QSQLITE");
- db.setHostName("127.0.0");
- db.setDatabaseName("people.db"); // 设置数据库名称
- db.setUserName("user");
- db.setPassword("pwssword");
- }
-
- if(!db.open()) {
- qDebug() << "database open error:" << db.lastError();;
- } else {
- qDebug() << "database ok!";
- }
-
-
- QSqlQuery query(db);
- if(db.tables().contains("users")) {
- // qDebug() << "table users already exists!";
- } else {
- // 表格不存在,则创建表格users
- // 创建表格users,1为普通用户,2为管理者
-
- QString cmd = "create table users(user varchar(50) primary key, pwd varchar(50),phone varchar(50), email varchar(50), identity varchar(20));";
-
- if(!query.exec(cmd)) {
- qDebug() << "create users table error!";
- }
- }
-
- // 主要用来保存头像图片
- if(db.tables().contains("images")) {
- //qDebug() << "table images already exists!";
- } else {
- // 表格不存在,则创建表格images
- if(!query.exec("create table images(user varchar(50) primary key, image BLOB)"))
- {
- qDebug() << "create images table error!";
- }
- }
-
- // 个人界面,里面有入职年份部门,性别年龄的信息
- if(db.tables().contains("informations")) {
- //qDebug() << "table informations already exists!";
- } else {
- // 表格不存在,则创建表格informations
- if(!query.exec("create table informations(user varchar(50) primary key, year varchar(50), section varchar(50), sex varchar(50), age varchar(50));"))
- {
- qDebug() << "create informations table error!";
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
bool selecting(QString user0); // 查询用户是否存在 bool selecting_root(QString user0); // 查询是否有管理员权限 bool selecting(QString user0, QString pwd0); // 查询用户名和密码是否正确
- // 查询用户存不存在,存在返回true
- bool Database::selecting(QString user0)
- {
- QSqlQuery query; // 执行查询语句
- QString S = QString("select * from users where user='%1';").arg(user0);
- // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
-
- if(query.exec(S)) {
- if(query.next()) {
- return true;
- } else {
- return false;
- }
- }
- }
-
-
- // 查询用户权限,管理员返回true
- bool Database::selecting_root(QString user0)
- {
- QSqlQuery query; // 执行查询语句
- QString S = QString("select identity from users where user='%1';").arg(user0);
- // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
-
- if(query.exec(S)) {
- if(query.next()) {
- return true;
- } else {
- return false;
- }
- }
- }
-
-
-
- // 查询用户存不存在,存在返回true
- bool Database::selecting(QString user0, QString pwd0)
- {
- QSqlQuery query; //执行查询语句
- QString S = QString("select * from users where user='%1' and pwd='%2';").arg(user0).arg(pwd0);
- // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
-
- if(query.exec(S)) {
- if(query.next()) {
- // qDebug() << "查询到用户";
- return true;
- } else {
- return false;
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
多表联合查询 join on
QMap<QString, QString> show(QString user0); //map容器,存储员工信息
QList< QMap<QString, QString> > show(); //显示所有用户的大部分信息,便于管理员管理图片格式jpg,png等
QByteArray selectImage(QString user0); //读取数据库的用户头像
- // map容器,存储员工信息
- QMap<QString, QString> Database::show(QString user0)
- {
- QMap<QString, QString> map; //map容器,存放key-value
- QSqlQuery query; //执行查询语句
- // join多表查询,主键一致
- QString S = QString("select * from users join informations on users.user=informations.user where users.user='%1'").arg(user0);
- query.exec(S);
- while (query.next()) {
- map.insert("phone", query.value(2).toString());
- map.insert("email", query.value(3).toString());
- map.insert("root", query.value(4).toString());
-
- map.insert("year", query.value(6).toString());
- map.insert("section", query.value(7).toString());
- map.insert("sex", query.value(8).toString());
- map.insert("age", query.value(9).toString());
- }
-
- return map;
- }
-
-
- // 显示所有用户的大部分信息,便于管理员管理
- QList< QMap<QString, QString> > Database::show()
- {
- QList<QMap <QString, QString> > lst; //内里为map容器的list容器
- QMap<QString, QString> map; //key-value都为qstring类型的map容器
-
- QSqlQuery query; //执行查询语句
- // join多表查询,主键一致
- QString S = QString("select * from users join informations on users.user=informations.user");
- query.exec(S);
- while (query.next()) {
- map.insert("name", query.value(0).toString());
- map.insert("phone", query.value(2).toString());
- map.insert("email", query.value(3).toString());
- map.insert("root", query.value(4).toString());
-
- map.insert("year", query.value(6).toString());
- map.insert("department", query.value(7).toString());
- map.insert("sex", query.value(8).toString());
- map.insert("age", query.value(9).toString());
-
- lst.append(map); //插入一行数据
- map.clear(); //清空一行数据
- }
- return lst;
- }
-
-
-
- // 读取数据库的用户头像
- QByteArray Database::selectImage(QString user0)
- {
- QSqlQuery query; //执行查询语句
- // 从数据库读取存入的照片显示到按钮处
- QByteArray outByteArray;
- QString cmd = QString("select * from images where user='%1'").arg(user0);
- query.exec(cmd);
- while (query.next()) {
- outByteArray = query.value(1).toByteArray();
- }
- return outByteArray;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
// 插入用户注册基础信息
bool inserting(QString user0, QString pwd0, QString phone0, QString email0, QString identify0);
// 注册,添加用户名和头像到数据库
void instering(QString user0, QByteArray imagepath);
// 初始赋值入职信息和基本信息
void inserting(QString user0);
// 插入基本信息表,用于管理者添加用户
void insertings(QString user0, QString year0, QString section0, QString sex0, QString age0);
- // 前提该用户不存在 注册,添加新的用户信息加入数据库
- bool Database::inserting(QString user0, QString pwd0, QString phone0, QString email0, QString identify0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("insert into users values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(pwd0).arg(phone0).arg(email0).arg(identify0);
- qDebug() << cmd;
- if(query.exec(cmd)) {
- qDebug() << "insert ok!";
- return true;
- } else {
- qDebug() << "insert error!";
- return false;
- }
- return false;
- }
-
-
- // 注册,添加用户名和头像到数据库
- void Database::instering(QString user0, QByteArray imagepath)
- {
- // 插入数据库 images为数据库表 image为存储照片字段 为Blob类型
- QString strQSL = QString("insert into images(user, image) values('%1',?)").arg(user0);
- QSqlQuery query;
- query.prepare(strQSL);
- query.addBindValue(imagepath);
- if(!query.exec()) {
- qDebug() << "image insert error!";
- }
- }
-
-
- // 登录成功,立马插入其他信息数据,将部门年龄赋值为0
- void Database::inserting(QString user0)
- {
- QString year0 = "0";
- QString section0 = "0";
- QString sex0 = "0";
- QString age0 = "0";
- QSqlQuery query; //执行查询语句
- QString S = QString("select * from informations where user='%1';").arg(user0);
-
- // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
- if(query.exec(S)) {
- if(!query.next()) {
- // 用户不存在,职工信息赋初始值0
- QString cmd = QString("insert into informations values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(year0).arg(section0).arg(sex0).arg(age0);
- // "insert into informations values('7788', '0', '0', '0', '0')"
- qDebug() << cmd;
- if(query.exec(cmd)) {
- qDebug() << "chushi insert ok!";
- } else {
- qDebug() << "chushi insert error!";
- }
- }
- }
-
- }
-
-
- // 插入基本信息表,用于管理者添加用户
- void Database::insertings(QString user0, QString year0, QString section0, QString sex0, QString age0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("insert into informations values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(year0).arg(section0).arg(sex0).arg(age0);
- qDebug() << cmd;
-
- if(query.exec(cmd)) {
- qDebug() << "insert ok!";
- } else {
- qDebug() << "insert error!";
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
bool updating(QString user0, QString pwd0); //更新密码
void updating(QString user0, QByteArray imagepath); //更新头像bool updating_root(QString user0, QString root); //管理员修改权限
bool updating(QString user0, QString year0, QString section0, QString sex0, QString age0); //个人界面修改入职信息,性别年龄
bool updating_person(QString user0, QString phone0); //修改个人信息,邮箱电话等
- // 修改密码
- bool Database::updating(QString user0, QString pwd0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("update users set pwd='%1' where user='%2'").arg(pwd0).arg(user0);
- if(query.exec(cmd)) {
- return true;
- }
- return false;
- }
-
-
- // 用户名,更新头像到数据库
- void Database::updating(QString user0, QByteArray imagepath)
- {
- // 插入数据库 images为数据库表 image为存储照片字段 为Blob类型
- QString strQSL = QString("update images set image=? where user='%1'").arg(user0);
- QSqlQuery query;
- query.prepare(strQSL);
- query.addBindValue(imagepath);
- if(!query.exec()) {
- qDebug() << "image update error!";
- }
- }
-
- // 管理员修改权限
- bool Database::updating_root(QString user0, QString root)
- {
- QSqlQuery query;
- QString cmd = QString("update users set identity='%1' where user='%2'").arg(root).arg(user0);
- if(query.exec(cmd)) {
- qDebug() << "用户权限修改成功 yes";
- return true;
- } else {
- qDebug() << "用户权限修改 nonono";
- return false;
- }
- }
-
- // 修改入职信息,年份职位
- bool Database::updating(QString user0, QString year0, QString section0, QString sex0, QString age0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("update informations set year='%1', section='%2', sex='%3', age='%4' where user='%5'")
- .arg(year0).arg(section0).arg(sex0).arg(age0).arg(user0);
- if(query.exec(cmd)) {
- return true;
- }
- return false;
- }
-
-
- // 修改个人信息,邮箱电话等
- bool Database::updating_person(QString user0, QString phone0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("update users set phone='%1', email='%2' where user='%3'").arg(phone0).arg(user0);
- if(query.exec(cmd)) {
- return true;
- }
- return false;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
bool deleting(QString user0, QString pwd0); //删除用户
bool deleting(QString user0); //删除用户的所有信息
- // 前提是该用户存在,执行删除命令,成功返回true
- bool Database::deleting(QString user0, QString pwd0)
- {
- QSqlQuery query; //执行查询语句
- QString cmd = QString("delete from users where user='%1' and pwd='%2'").arg(user0).arg(pwd0);
- if(query.exec(cmd)) {
- return true;
- }
- return false;
- }
-
-
- // 删除用户的所有信息
- bool Database::deleting(QString user0)
- {
- QSqlQuery query; //执行查询语句
- // join多表查询,主键一致
- QString S = QString("delete from users join informations on users.user=informations.user");
- if(query.exec(S)) {
- return true;
- }
- return false;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。