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的操作(超详细)包含增删改查_第1张图片

qt 对数据库sqlite的操作(超详细)包含增删改查_第2张图片

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

你可能感兴趣的:(qt,sqlite,数据库)