目录
一、表格数据类型示例
在pro里面 QT += core gui sql
二、头文件包含
三、增删改查操作
3.1 查询 select
3.2 多表联合查询 join on 图片格式jpg,png
3.3 插入 insert
3.4 更新修改 update
3.5 删除 delete
主要有三个表格,其中images存的是照片,关键字都是user,可以通过user来多表联合查询
建立的DataBase文件为c++类型,继承自QObject
在pro里面 QT += core gui sql
#include
#include
#include
#include
#include
#include
#include
#include
#include
注意:在构造函数里面调用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!";
}
}
}
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;
}
}
}
多表联合查询 join on
QMap
show(QString user0); //map容器,存储员工信息
QList< QMap> show(); //显示所有用户的大部分信息,便于管理员管理 图片格式jpg,png等
QByteArray selectImage(QString user0); //读取数据库的用户头像
// map容器,存储员工信息
QMap Database::show(QString user0)
{
QMap 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 > Database::show()
{
QList > lst; //内里为map容器的list容器
QMap 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;
}
// 插入用户注册基础信息
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!";
}
}
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;
}
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;
}