当前位置:   article > 正文

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

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


一、表格数据类型示例

 主要有三个表格,其中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(),必须先连接数据库才能对数据进行操作。

  1. // 创建数据库,连接数据库
  2. void Database::create_database()
  3. {
  4. QSqlDatabase db;
  5. // 避免重复连接数据库
  6. if(QSqlDatabase::contains("qt_sql_default_connection")) {
  7. db = QSqlDatabase::database("qt_sql_default_connection");
  8. } else {
  9. db = QSqlDatabase::addDatabase("QSQLITE");
  10. db.setHostName("127.0.0");
  11. db.setDatabaseName("people.db"); // 设置数据库名称
  12. db.setUserName("user");
  13. db.setPassword("pwssword");
  14. }
  15. if(!db.open()) {
  16. qDebug() << "database open error:" << db.lastError();;
  17. } else {
  18. qDebug() << "database ok!";
  19. }
  20. QSqlQuery query(db);
  21. if(db.tables().contains("users")) {
  22. // qDebug() << "table users already exists!";
  23. } else {
  24. // 表格不存在,则创建表格users
  25. // 创建表格users,1为普通用户,2为管理者
  26. QString cmd = "create table users(user varchar(50) primary key, pwd varchar(50),phone varchar(50), email varchar(50), identity varchar(20));";
  27. if(!query.exec(cmd)) {
  28. qDebug() << "create users table error!";
  29. }
  30. }
  31. // 主要用来保存头像图片
  32. if(db.tables().contains("images")) {
  33. //qDebug() << "table images already exists!";
  34. } else {
  35. // 表格不存在,则创建表格images
  36. if(!query.exec("create table images(user varchar(50) primary key, image BLOB)"))
  37. {
  38. qDebug() << "create images table error!";
  39. }
  40. }
  41. // 个人界面,里面有入职年份部门,性别年龄的信息
  42. if(db.tables().contains("informations")) {
  43. //qDebug() << "table informations already exists!";
  44. } else {
  45. // 表格不存在,则创建表格informations
  46. if(!query.exec("create table informations(user varchar(50) primary key, year varchar(50), section varchar(50), sex varchar(50), age varchar(50));"))
  47. {
  48. qDebug() << "create informations table error!";
  49. }
  50. }
  51. }

三、增删改查操作

3.1 查询 select

    bool selecting(QString user0);                     // 查询用户是否存在
    bool selecting_root(QString user0);                // 查询是否有管理员权限
    bool selecting(QString user0, QString pwd0);       // 查询用户名和密码是否正确
  1. // 查询用户存不存在,存在返回true
  2. bool Database::selecting(QString user0)
  3. {
  4. QSqlQuery query; // 执行查询语句
  5. QString S = QString("select * from users where user='%1';").arg(user0);
  6. // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
  7. if(query.exec(S)) {
  8. if(query.next()) {
  9. return true;
  10. } else {
  11. return false;
  12. }
  13. }
  14. }
  15. // 查询用户权限,管理员返回true
  16. bool Database::selecting_root(QString user0)
  17. {
  18. QSqlQuery query; // 执行查询语句
  19. QString S = QString("select identity from users where user='%1';").arg(user0);
  20. // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
  21. if(query.exec(S)) {
  22. if(query.next()) {
  23. return true;
  24. } else {
  25. return false;
  26. }
  27. }
  28. }
  29. // 查询用户存不存在,存在返回true
  30. bool Database::selecting(QString user0, QString pwd0)
  31. {
  32. QSqlQuery query; //执行查询语句
  33. QString S = QString("select * from users where user='%1' and pwd='%2';").arg(user0).arg(pwd0);
  34. // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
  35. if(query.exec(S)) {
  36. if(query.next()) {
  37. // qDebug() << "查询到用户";
  38. return true;
  39. } else {
  40. return false;
  41. }
  42. }
  43. }

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

多表联合查询 join on

    QMap<QString, QString> show(QString user0);        //map容器,存储员工信息
    QList< QMap<QString, QString> > show();               //显示所有用户的大部分信息,便于管理员管理

图片格式jpg,png等
    QByteArray selectImage(QString user0);                 //读取数据库的用户头像   

  1. // map容器,存储员工信息
  2. QMap<QString, QString> Database::show(QString user0)
  3. {
  4. QMap<QString, QString> map; //map容器,存放key-value
  5. QSqlQuery query; //执行查询语句
  6. // join多表查询,主键一致
  7. QString S = QString("select * from users join informations on users.user=informations.user where users.user='%1'").arg(user0);
  8. query.exec(S);
  9. while (query.next()) {
  10. map.insert("phone", query.value(2).toString());
  11. map.insert("email", query.value(3).toString());
  12. map.insert("root", query.value(4).toString());
  13. map.insert("year", query.value(6).toString());
  14. map.insert("section", query.value(7).toString());
  15. map.insert("sex", query.value(8).toString());
  16. map.insert("age", query.value(9).toString());
  17. }
  18. return map;
  19. }
  20. // 显示所有用户的大部分信息,便于管理员管理
  21. QList< QMap<QString, QString> > Database::show()
  22. {
  23. QList<QMap <QString, QString> > lst; //内里为map容器的list容器
  24. QMap<QString, QString> map; //key-value都为qstring类型的map容器
  25. QSqlQuery query; //执行查询语句
  26. // join多表查询,主键一致
  27. QString S = QString("select * from users join informations on users.user=informations.user");
  28. query.exec(S);
  29. while (query.next()) {
  30. map.insert("name", query.value(0).toString());
  31. map.insert("phone", query.value(2).toString());
  32. map.insert("email", query.value(3).toString());
  33. map.insert("root", query.value(4).toString());
  34. map.insert("year", query.value(6).toString());
  35. map.insert("department", query.value(7).toString());
  36. map.insert("sex", query.value(8).toString());
  37. map.insert("age", query.value(9).toString());
  38. lst.append(map); //插入一行数据
  39. map.clear(); //清空一行数据
  40. }
  41. return lst;
  42. }
  43. // 读取数据库的用户头像
  44. QByteArray Database::selectImage(QString user0)
  45. {
  46. QSqlQuery query; //执行查询语句
  47. // 从数据库读取存入的照片显示到按钮处
  48. QByteArray outByteArray;
  49. QString cmd = QString("select * from images where user='%1'").arg(user0);
  50. query.exec(cmd);
  51. while (query.next()) {
  52. outByteArray = query.value(1).toByteArray();
  53. }
  54. return outByteArray;
  55. }

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

  1. // 前提该用户不存在 注册,添加新的用户信息加入数据库
  2. bool Database::inserting(QString user0, QString pwd0, QString phone0, QString email0, QString identify0)
  3. {
  4. QSqlQuery query; //执行查询语句
  5. QString cmd = QString("insert into users values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(pwd0).arg(phone0).arg(email0).arg(identify0);
  6. qDebug() << cmd;
  7. if(query.exec(cmd)) {
  8. qDebug() << "insert ok!";
  9. return true;
  10. } else {
  11. qDebug() << "insert error!";
  12. return false;
  13. }
  14. return false;
  15. }
  16. // 注册,添加用户名和头像到数据库
  17. void Database::instering(QString user0, QByteArray imagepath)
  18. {
  19. // 插入数据库 images为数据库表 image为存储照片字段 为Blob类型
  20. QString strQSL = QString("insert into images(user, image) values('%1',?)").arg(user0);
  21. QSqlQuery query;
  22. query.prepare(strQSL);
  23. query.addBindValue(imagepath);
  24. if(!query.exec()) {
  25. qDebug() << "image insert error!";
  26. }
  27. }
  28. // 登录成功,立马插入其他信息数据,将部门年龄赋值为0
  29. void Database::inserting(QString user0)
  30. {
  31. QString year0 = "0";
  32. QString section0 = "0";
  33. QString sex0 = "0";
  34. QString age0 = "0";
  35. QSqlQuery query; //执行查询语句
  36. QString S = QString("select * from informations where user='%1';").arg(user0);
  37. // query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。
  38. if(query.exec(S)) {
  39. if(!query.next()) {
  40. // 用户不存在,职工信息赋初始值0
  41. QString cmd = QString("insert into informations values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(year0).arg(section0).arg(sex0).arg(age0);
  42. // "insert into informations values('7788', '0', '0', '0', '0')"
  43. qDebug() << cmd;
  44. if(query.exec(cmd)) {
  45. qDebug() << "chushi insert ok!";
  46. } else {
  47. qDebug() << "chushi insert error!";
  48. }
  49. }
  50. }
  51. }
  52. // 插入基本信息表,用于管理者添加用户
  53. void Database::insertings(QString user0, QString year0, QString section0, QString sex0, QString age0)
  54. {
  55. QSqlQuery query; //执行查询语句
  56. QString cmd = QString("insert into informations values('%1', '%2', '%3', '%4', '%5')").arg(user0).arg(year0).arg(section0).arg(sex0).arg(age0);
  57. qDebug() << cmd;
  58. if(query.exec(cmd)) {
  59. qDebug() << "insert ok!";
  60. } else {
  61. qDebug() << "insert error!";
  62. }
  63. }

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);       //修改个人信息,邮箱电话等

  1. // 修改密码
  2. bool Database::updating(QString user0, QString pwd0)
  3. {
  4. QSqlQuery query; //执行查询语句
  5. QString cmd = QString("update users set pwd='%1' where user='%2'").arg(pwd0).arg(user0);
  6. if(query.exec(cmd)) {
  7. return true;
  8. }
  9. return false;
  10. }
  11. // 用户名,更新头像到数据库
  12. void Database::updating(QString user0, QByteArray imagepath)
  13. {
  14. // 插入数据库 images为数据库表 image为存储照片字段 为Blob类型
  15. QString strQSL = QString("update images set image=? where user='%1'").arg(user0);
  16. QSqlQuery query;
  17. query.prepare(strQSL);
  18. query.addBindValue(imagepath);
  19. if(!query.exec()) {
  20. qDebug() << "image update error!";
  21. }
  22. }
  23. // 管理员修改权限
  24. bool Database::updating_root(QString user0, QString root)
  25. {
  26. QSqlQuery query;
  27. QString cmd = QString("update users set identity='%1' where user='%2'").arg(root).arg(user0);
  28. if(query.exec(cmd)) {
  29. qDebug() << "用户权限修改成功 yes";
  30. return true;
  31. } else {
  32. qDebug() << "用户权限修改 nonono";
  33. return false;
  34. }
  35. }
  36. // 修改入职信息,年份职位
  37. bool Database::updating(QString user0, QString year0, QString section0, QString sex0, QString age0)
  38. {
  39. QSqlQuery query; //执行查询语句
  40. QString cmd = QString("update informations set year='%1', section='%2', sex='%3', age='%4' where user='%5'")
  41. .arg(year0).arg(section0).arg(sex0).arg(age0).arg(user0);
  42. if(query.exec(cmd)) {
  43. return true;
  44. }
  45. return false;
  46. }
  47. // 修改个人信息,邮箱电话等
  48. bool Database::updating_person(QString user0, QString phone0)
  49. {
  50. QSqlQuery query; //执行查询语句
  51. QString cmd = QString("update users set phone='%1', email='%2' where user='%3'").arg(phone0).arg(user0);
  52. if(query.exec(cmd)) {
  53. return true;
  54. }
  55. return false;
  56. }

3.5 删除 delete

    bool deleting(QString user0, QString pwd0);     //删除用户
    bool deleting(QString user0);                            //删除用户的所有信息

  1. // 前提是该用户存在,执行删除命令,成功返回true
  2. bool Database::deleting(QString user0, QString pwd0)
  3. {
  4. QSqlQuery query; //执行查询语句
  5. QString cmd = QString("delete from users where user='%1' and pwd='%2'").arg(user0).arg(pwd0);
  6. if(query.exec(cmd)) {
  7. return true;
  8. }
  9. return false;
  10. }
  11. // 删除用户的所有信息
  12. bool Database::deleting(QString user0)
  13. {
  14. QSqlQuery query; //执行查询语句
  15. // join多表查询,主键一致
  16. QString S = QString("delete from users join informations on users.user=informations.user");
  17. if(query.exec(S)) {
  18. return true;
  19. }
  20. return false;
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/866846
推荐阅读
  

闽ICP备14008679号