qt 对数据库sqlite的操作(超详细)包含增删改查

目录

一、表格数据类型示例

在pro里面         QT += core gui sql

二、头文件包含

三、增删改查操作

3.1 查询 select

3.2 多表联合查询 join on        图片格式jpg,png

3.3 插入 insert

3.4 更新修改 update

3.5 删除 delete


一、表格数据类型示例

qt 对数据库sqlite的操作(超详细)包含增删改查

qt 对数据库sqlite的操作(超详细)包含增删改查

qt 对数据库sqlite的操作(超详细)包含增删改查

 主要有三个表格,其中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!";
        }
    }
}

三、增删改查操作

3.1 查询 select

    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;
        }
    }
}

3.2 多表联合查询 join on        图片格式jpg,png

多表联合查询 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<QMap  > 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;
}

3.3 插入 insert

    // 插入用户注册基础信息

    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!";
    }

}

3.4 更新修改 update

    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;
}

3.5 删除 delete

    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://net2asp.com/b3b573531c.html