SQLite3 数据库学习(四):Qt 数据库基础操作

参考引用

  • SQLite 权威指南(第二版)
  • SQLite3 入门

1. 创建连接执行 sql 语句

在这里插入图片描述

  • 在 Qt 中使用数据库要在工程文件中添加
    QT += sql
    

1.1 main.cpp

#include "createsqlapp.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个默认数据库连接,在后期整个 Qt 应用中可使用,通过 Qt 中的接口函数操作数据库// 创建数据库连接句柄QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库名称,用户名,密码db.setDatabaseName("my.db");// 打开数据库if (!db.open()) {qDebug() << db.lastError().text();  // 输出错误信息}CreateSqlApp w;w.show();return a.exec();
}

1.2 createsqlapp.h

#ifndef CREATESQLAPP_H
#define CREATESQLAPP_H#include <QWidget>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
#include <QString>QT_BEGIN_NAMESPACE
namespace Ui { class CreateSqlApp; }
QT_END_NAMESPACEclass CreateSqlApp : public QWidget {Q_OBJECTpublic:CreateSqlApp(QWidget *parent = nullptr);~CreateSqlApp();private slots:void on_pushButton_clicked();private:Ui::CreateSqlApp *ui;
};
#endif // CREATESQLAPP_H

1.3 createsqlapp.cpp

#include "createsqlapp.h"
#include "ui_createsqlapp.h"CreateSqlApp::CreateSqlApp(QWidget *parent) : QWidget(parent), ui(new Ui::CreateSqlApp) {ui->setupUi(this);// 创建数据库表格QSqlQuery query;  // 自动关联到默认连接名的数据库// 执行创建表格的语句if (!query.exec("create table if not exists student(id int, name text)")) {qDebug() << query.lastError().text();}// 插入语句if (!query.exec("insert into student values(0, 'Tom')")) {qDebug() << query.lastError().text();}
}CreateSqlApp::~CreateSqlApp() {delete ui;
}void CreateSqlApp::on_pushButton_clicked() {QString sql = QString("insert into student values(%1, '%2')").arg(ui->idEdit->text()).arg(ui->nameEdit->text());QSqlQuery query;  // 自动关联到默认连接名的数据库// 执行创建表格的语句if (!query.exec(sql)) {qDebug() << query.lastError().text();}
}

1.4 createsqlapp.ui

在这里插入图片描述

  • 在界面添加数据后点添加数据按钮,查看添加成功数据如下图所示(其中 0 为默认添加)
    • 1 yuexd
    • 2 juzy
      在这里插入图片描述

2. 用户名和密码注册、登录

  • 注册
    在这里插入图片描述

  • 登录
    在这里插入图片描述

2.1 main.cpp

#include "loginsqlite.h"#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个默认数据库连接,在后期整个 Qt 应用中可使用,通过 Qt 中的接口函数操作数据库// 创建数据库连接句柄QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库名称,用户名,密码db.setDatabaseName("my.db");// 打开数据库if (!db.open()) {qDebug() << db.lastError().text();  // 输出错误信息}// 创建表格QString sql = "create table if not exists user(id integer primary key autoincrement,""username varchar(256) unique, password varchar(256))";// 执行 sql 语句QSqlQuery query;  // 自动关联到默认连接名的数据库if (query.exec(sql)) {qDebug() << query.lastError().text();}loginSqlite w;w.show();return a.exec();
}

2.2 loginsqlite.cpp

#include "loginsqlite.h"
#include "ui_loginsqlite.h"loginSqlite::loginSqlite(QWidget *parent) : QWidget(parent), ui(new Ui::loginSqlite) {ui->setupUi(this);// 从配置文件中提取用户名和密码(再次打开登录界面会默认显示上次登录的用户名和密码)QSettings setting(QSettings::IniFormat, QSettings::SystemScope, "config");QString username = setting.value("username").toString();QString password = setting.value("password").toString();ui->userEdit->setText(username);ui->passEdit->setText(password);
}loginSqlite::~loginSqlite() {delete ui;
}// 查询数据库
void loginSqlite::on_loginBt_clicked() {QString username = ui->userEdit->text();QString password = ui->passEdit->text();// 打包插入的 sql 语句QString sql = QString("select * from user where username='%1' and password='%2'").arg(username).arg(password);// 执行 sql 插入语句QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();return;}// 获取查询的数据if (query.next()) {  // 指向第一个数据// 查到记录qDebug() << "find record";// QSettings 记录用户名密码if (ui->checkBox->isChecked()) {// 打开配置文件 (在 C:\ProgramData 目录下)QSettings setting(QSettings::IniFormat, QSettings::SystemScope, "config.ini");// 把用户名和密码设置到配置文件中setting.setValue("username", username);setting.setValue("password", password);}} else {// 未查到记录qDebug() << "not find record";}QSqlRecord record = query.record();  // 一行数据是一条记录qDebug() << record.value("username").toString();qDebug() << record.value("password").toString();
}// 插入数据
void loginSqlite::on_regBt_clicked() {QString username = ui->userEdit->text();QString password = ui->passEdit->text();// 打包插入的 sql 语句QString sql = QString("insert into user(username, password) values('%1', '%2')").arg(username).arg(password);// 执行 sql 插入语句QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();QMessageBox::information(this, "registe", "registe failed");return;}QMessageBox::information(this, "registe", "registed");
}

2.3 loginsqlite.ui

在这里插入图片描述

2.4 qss 样式

QWidget {background-color: rgb(255, 255, 255);
}QLineEdit {border:1px solid#cccccc;
}QPushButton#loginBt {border:1px solid#3f89ec;background-color: rgb(63, 137, 236);color: rgb(255, 255, 255);
}QPushButton#pssBt {color: rgb(46, 130, 255);
}QPushButton#regBt {color: rgb(46, 130, 255);
}QPushButton#pssBt : hover {color: rgb(46, 100, 200);
}QPushButton#regBt : hover {color: rgb(46, 100, 200);
}QCheckBox {color: rgb(117, 117, 117);
}

3. Qt 连接多个数据库并分别插入数据

在这里插入图片描述

在这里插入图片描述

3.1 main.cpp (.pro 文件中记得添加 sql 模块)

#include "muldatabaseapp.h"#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建数据库连接句柄 AdbQSqlDatabase Adb = QSqlDatabase::addDatabase("QSQLITE", "Adb");  // (数据库驱动名,连接名)Adb.setDatabaseName("Amy.db");  // 设置数据库名称,用户名,密码if(!Adb.open()) {  // 打开数据库 AdbqDebug() << Adb.lastError().text();  // 输出错误信息}// 创建数据库连接句柄 BdbQSqlDatabase Bdb = QSqlDatabase::addDatabase("QSQLITE", "Bdb");Bdb.setDatabaseName("Bmy.db");if(!Bdb.open()) {qDebug()<<Bdb.lastError().text();}// 给多个数据库创建表格QString sql = "create table if not exists user(id integer primary key autoincrement,""username varchar(256) unique, password varchar(256))";QSqlQuery queryA(Adb);   // 给 A 数据库创建表格queryA.exec(sql);QSqlQuery queryB(Bdb);   // 给 B 数据库创建表格queryB.exec(sql);MulDataBaseApp w;w.show();return a.exec();
}

3.2 muldatabaseapp.h

#ifndef MULDATABASEAPP_H
#define MULDATABASEAPP_H#include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>QT_BEGIN_NAMESPACE
namespace Ui { class MulDataBaseApp; }
QT_END_NAMESPACEclass MulDataBaseApp : public QWidget {Q_OBJECTpublic:MulDataBaseApp(QWidget *parent = nullptr);~MulDataBaseApp();private slots:void on_insertBt_clicked();private:Ui::MulDataBaseApp *ui;
};
#endif // MULDATABASEAPP_H

3.3 muldatabaseapp.cpp

#include "muldatabaseapp.h"
#include "ui_muldatabaseapp.h"MulDataBaseApp::MulDataBaseApp(QWidget *parent) : QWidget(parent), ui(new Ui::MulDataBaseApp) {ui->setupUi(this);
}MulDataBaseApp::~MulDataBaseApp() {delete ui;
}void MulDataBaseApp::on_insertBt_clicked() {QString username = ui->userEdit->text();QString password = ui->passEdit->text();QString sql = QString("insert into user(username, password) values('%1', '%2')").arg(username).arg(password);// 选中 rbA 单选框if (ui->rbA->isChecked()) {QSqlQuery query(QSqlDatabase::database("Adb"));if (!query.exec(sql)) {qDebug() << query.lastError().text();}} else if (ui->rbB->isChecked()) {  // 选中 rbB 单选框QSqlQuery query(QSqlDatabase::database("Bdb"));if (!query.exec(sql)) {qDebug() << query.lastError().text();}}
}

3.4 muldatabaseapp.ui

在这里插入图片描述

4. Qt 数据库增删改查

  • 设计一个存储 QLabel 的样式
    在这里插入图片描述

4.1 main.cpp

#include "labelstylesql.h"#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建数据库连接句柄QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "db");  // (数据库驱动名,连接名)db.setDatabaseName("my.db");  // 设置数据库名称,用户名,密码if (!db.open()) {qDebug() << db.lastError().text();  // 输出错误信息}// 给数据库创建表格QString sql = "create table if not exists label(id integer primary key autoincrement,""border_size int, border_color varchar(16),""border_radius int, background_color) varchar(16), color varchar(16)";QSqlQuery query(db);query.exec(sql);LabelStyleSql w;w.show();return a.exec();
}

4.2 labelstylesql.h

#ifndef LABELSTYLESQL_H
#define LABELSTYLESQL_H#include <QWidget>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>
#include <QSqlRecord>QT_BEGIN_NAMESPACE
namespace Ui { class LabelStyleSql; }
QT_END_NAMESPACEclass LabelStyleSql : public QWidget {Q_OBJECTpublic:LabelStyleSql(QWidget *parent = nullptr);~LabelStyleSql();private slots:void on_insertBt_clicked();void on_selectBt_clicked();void on_deleteBt_clicked();void on_updateBt_clicked();void on_testBt_clicked();private:Ui::LabelStyleSql *ui;void update_feild(QString key, QString value, int id);
};
#endif // LABELSTYLESQL_H

4.3 labelstylesql.cpp

#include "labelstylesql.h"
#include "ui_labelstylesql.h"LabelStyleSql::LabelStyleSql(QWidget *parent) : QWidget(parent), ui(new Ui::LabelStyleSql) {ui->setupUi(this);
}LabelStyleSql::~LabelStyleSql() {delete ui;
}// 插入(添加)数据
void LabelStyleSql::on_insertBt_clicked() {QString sql = QString("insert into label(border_size, border_color, border_radius, background_color, color) ""values(%1, '%2', %3, '%4', '%5')").arg(ui->bsizeEdit->text()).arg(ui->bcolorEdit->text()).arg(ui->bradiusEdit->text()).arg(ui->backcolorEdit->text()).arg(ui->fontcolorEdit->text());QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();}
}// 查询数据
void LabelStyleSql::on_selectBt_clicked() {QString id = ui->idEdit->text();QString sql = QString("select * from label where id=%1").arg(id);QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();}while (query.next()) {QSqlRecord record = query.record();ui->bsizeEdit->setText(record.value("border_size").toString());ui->bcolorEdit->setText(record.value("border_color").toString());ui->bradiusEdit->setText(record.value("border_radius").toString());ui->backcolorEdit->setText(record.value("background_color").toString());ui->fontcolorEdit->setText(record.value("color").toString());}
}// 删除数据
void LabelStyleSql::on_deleteBt_clicked() {QString id = ui->idEdit->text();QString sql = QString("delete from label where id=%1").arg(id);QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();}
}// 更新数据函数
void LabelStyleSql::update_feild(QString key, QString value, int id) {QString sql = QString("update label set %1='%2' where id=%3").arg(key).arg(value).arg(id);QSqlQuery query;if (!query.exec(sql)) {qDebug() << query.lastError().text();}
}// 更新数据
void LabelStyleSql::on_updateBt_clicked() {QString id = ui->idEdit->text();update_feild("border_size", ui->bsizeEdit->text(), id.toInt());update_feild("border_color", ui->bcolorEdit->text(), id.toInt());
}// 存储 QLabel 标签样式
void LabelStyleSql::on_testBt_clicked() {QString bsize = ui->bsizeEdit->text();QString bcolor = ui->bcolorEdit->text();QString bradius = ui->bradiusEdit->text();QString backcolor = ui->backcolorEdit->text();QString fontcolor = ui->fontcolorEdit->text();QString style = QString("border:%1px solid%2; border-radius:%3px; background-color:%4; color:%5").arg(bsize).arg(bcolor).arg(bradius).arg(backcolor).arg(fontcolor);ui->label->setStyleSheet(style);
}

4.4 labelstylesql.ui

在这里插入图片描述

5. Qt 数据库绑定机制

在这里插入图片描述

在这里插入图片描述

5.1 main.cpp

#include "sqlquerybindapp.h"#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建数据库连接句柄QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库名称,用户名,密码db.setDatabaseName("my.db");if (!db.open()) {  // 打开数据库qDebug() << db.lastError().text();  // 输出错误信息}// 创建表格QString sql = "create table if not exists student(id integer primary key autoincrement,""name varchar(256), sex varchar(16))";// 执行 sql 语句QSqlQuery query(db);if (query.exec(sql)) {qDebug() << query.lastError().text();}SqlQueryBindApp w;w.show();return a.exec();
}

5.2 sqlquerybindapp.h

#ifndef SQLQUERYBINDAPP_H
#define SQLQUERYBINDAPP_H#include <QWidget>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>
#include <QVariantList>
#include <QVariant>QT_BEGIN_NAMESPACE
namespace Ui { class SqlQueryBindApp; }
QT_END_NAMESPACEclass SqlQueryBindApp : public QWidget {Q_OBJECTpublic:SqlQueryBindApp(QWidget *parent = nullptr);~SqlQueryBindApp();private slots:void on_bindinsertBt_clicked();void on_bindsBt_clicked();private:Ui::SqlQueryBindApp *ui;
};
#endif // SQLQUERYBINDAPP_H

5.3 sqlquerybindapp.cpp

#include "sqlquerybindapp.h"
#include "ui_sqlquerybindapp.h"SqlQueryBindApp::SqlQueryBindApp(QWidget *parent) : QWidget(parent), ui(new Ui::SqlQueryBindApp) {ui->setupUi(this);
}SqlQueryBindApp::~SqlQueryBindApp() {delete ui;
}// 单个绑定数据
void SqlQueryBindApp::on_bindinsertBt_clicked() {QSqlQuery query;// 准备执行的语句QString sql="insert into student(name , sex) values(:name, :sex)";query.prepare(sql);// 绑定数据(通过位置绑定)query.bindValue(0, ui->nameEdit->text());query.bindValue(1, ui->sexEdit->text());// 执行query.exec();
}// 批量绑定数据
void SqlQueryBindApp::on_bindsBt_clicked() {QSqlQuery query;// 准备执行的语句QString sql="insert into student(name, sex) values(:name, :sex)";query.prepare(sql);// 批量绑定数据QVariantList names;names << "AAA" << "BBB" << "CCC";query.addBindValue(names);  //添加到占位符的第 0  ->:name个位置QVariantList sexs;// 绑定多个数据:如果有多个字段,每个字段绑定数据的个数要一致// 此处第三个数据起到占位作用,目的是数据个数与 names 保持一致sexs << "man" << "women" << QVariant(QVariant::String);query.addBindValue(sexs);// 批量执行query.execBatch();
}

5.4 sqlquerybindapp.ui

在这里插入图片描述

6. Qt 数据库事务机制

bool QSqlDatabase::transaction()  // 开启事务---begin
bool QSqlDatabase::commit()       // 提交事务---commit
bool QSqlDatabase::rollback()     // 事务回滚---rollback
  • 点击开启事务后所有对数据库的操作都在内存中进行,只有点提交事务后才会同步到数据库中
    在这里插入图片描述

  • 即使点击开启事务,在 Qt 中依然可以查询到更改信息(点回滚事务则撤回上一步操作并自动结束本轮事务机制)
    在这里插入图片描述

6.1 main.cpp

#include "sqlquerybindapp.h"#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建数据库连接句柄QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// 设置数据库名称,用户名,密码db.setDatabaseName("my.db");if (!db.open()) {  // 打开数据库qDebug() << db.lastError().text();  // 输出错误信息}// 创建表格QString sql = "create table if not exists student(id integer primary key autoincrement,""name varchar(256), sex varchar(16))";// 执行 sql 语句QSqlQuery query(db);if (query.exec(sql)) {qDebug() << query.lastError().text();}SqlQueryBindApp w;w.show();return a.exec();
}

6.2 transactionapp.h

#ifndef TRANSACTIONAPP_H
#define TRANSACTIONAPP_H#include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>
#include <QSqlRecord>QT_BEGIN_NAMESPACE
namespace Ui { class transactionApp; }
QT_END_NAMESPACEclass transactionApp : public QWidget {Q_OBJECTpublic:transactionApp(QWidget *parent = nullptr);~transactionApp();private slots:void on_beginBt_clicked();void on_commitBt_clicked();void on_rollbackBt_clicked();void on_insertBt_clicked();void on_selectBt_clicked();private:Ui::transactionApp *ui;
};
#endif // TRANSACTIONAPP_H

6.3 transactionapp.cpp

#include "transactionapp.h"
#include "ui_transactionapp.h"transactionApp::transactionApp(QWidget *parent) : QWidget(parent), ui(new Ui::transactionApp) {ui->setupUi(this);
}transactionApp::~transactionApp() {delete ui;
}void transactionApp::on_beginBt_clicked() {// 开始事务处理if (QSqlDatabase::database().transaction()) {qDebug() << "begin success!";} else {qDebug() << "begin failed!";}
}void transactionApp::on_commitBt_clicked() {// 提交事务处理if (QSqlDatabase::database().commit()) {qDebug() << "commit success!";} else {qDebug() << "commit failed!";}
}void transactionApp::on_rollbackBt_clicked() {// 回滚事务处理if (QSqlDatabase::database().rollback()) {qDebug() << "rollback success!";} else {qDebug() << "rollback failed!";}
}void transactionApp::on_insertBt_clicked() {QSqlQuery query;// 准备执行的语句QString sql = "insert into student(name , sex) values(:name, :sex)";query.prepare(sql);// 绑定数据(通过位置绑定)query.bindValue(0, ui->nameEdit->text());query.bindValue(1, ui->sexEdit->text());// 执行query.exec();
}void transactionApp::on_selectBt_clicked() {QSqlQuery query;// 准备执行的语句QString sql = "select * from student";query.exec(sql);while (query.next()) {qDebug() << query.record().value("name").toString();}
}

6.4 transactionapp.ui

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香港高端人才通行证计划申请(包括条件)你需要知道的这些真相!

香港高端人才通行证计划申请&#xff08;包括条件&#xff09;你需要知道的这些真相&#xff01; 香港高才通计划从刚推出就带着“光速获批“的光环&#xff0c;吸引了大批高学历和高收入人士&#xff0c;后续也因它申请要求简单、明确&#xff0c;获批率高等优势&#xff0c;火…

主机dbeaver访问gitlab容器中的pg

映射5432端口- 5431:5432或者从docker客户端查看 version: 3.6 services:web:image: gitlab/gitlab-ce:latestrestart: alwayshostname: localhostenvironment:GITLAB_OMNIBUS_CONFIG: |external_url http://localhost:8929gitlab_rails[gitlab_shell_ssh_port] 2224ports:- …

文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题

五、用go语言&#xff0c;考虑一个装载因子为a的开放寻址散列表。找出一个非零的a值&#xff0c;使得一次不成功查找的探查期望数是一次成功查找的探查期望数的 2 倍。这两个探查期望数可以使用定理11.6 和定理 11.8 中给定的上界。 文心一言&#xff0c;代码正常运行&#xf…

springboot宠物领养系统-计算机毕设 附源码 44261

springboot宠物领养系统 摘 要 网络发布信息有其突出的优点&#xff0c;即信息量大&#xff0c;资源丰富&#xff0c;更新速度快等&#xff0c;很符合人们希望以捷、便利的方式获得最多最有效信息的要求。本系统就是一个网上宠物领养系统&#xff0c;为宠物爱好者提供一个信息…

pyqt5 窗口调用网页高德地图kpi,进行实时地图导航

作为主项目功能的一部分&#xff0c;这部分我想单独记录下来 一&#xff0c;注册高德kpi【进行实名认证】 高德开放平台 | 高德地图API (amap.com) 二&#xff0c;申请Key 三&#xff0c;进入路径规划-API文档-开发指南-Web服务 API|高德地图API (amap.com) 找到你需要的路径…

【必读】从零开始,一步步教你安装nginx,搭建个人博客网站!

nginx搭建个人网站 Nginx是一款轻量级Web服务器、反向代理服务器以及电子邮件代理服务器&#xff0c;并且具有高并发连接处理能力和低内存消耗的特点。它也可以用于负载均衡和缓存控制等功能。 功能&#xff1a; 静态网站服务器&#xff1a;Nginx可以用来作为静态网站服务器&am…

员工微信私下收红包,企业如何加强监管

随着智能手机的普及和社交软件的兴起&#xff0c;越来越多的企业和员工开始使用微信等社交应用程序进行日常工作交流和业务协作。然而&#xff0c;与此同时&#xff0c;一些行业的员工在微信上私下收取红包的问题也日益严重&#xff0c;这不仅违反了公司的规定&#xff0c;也损…

Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署

KubernetesGitlabJenkinsArgoCD多集群部署 文章目录 KubernetesGitlabJenkinsArgoCD多集群部署1. KubernetesGitlabJenkinsArgoCD多集群部署2. 添加WebHooks自动触发3. Jenkins-构建-执行Shell4. 制作镜像及修改Yaml文件4.1 Dockerfile4.2 Build-Shell 5.自动部署Demo测试5.1 推…

JSP EL表达式基本使用

今天我们来说EL表达式 这在整个jsp中都是非常重要的一章 因为 如果我们用 <%属性%> 属性为空时 直接就是个 null 这个肯定是不能让用户看到的东西 所以 我们就需要EL表达式 例如 我们jsp代码编写如下 <% page contentType"text/html; charsetUTF-8" page…

React函数组件渲染两次

渲染两次是因为react默认开启了严格模式 React.StrictMode标签作用&#xff1a; 1、识别不安全的生命周期 2、关于使用过时字符串 ref API 的警告 3、关于使用废弃的 findDOMNode 方法的警告 4、检测意外的副作用 5、检测过时的 context API 注释掉React.StrictMode即为关闭严…

【Windows 常用工具系列 12 -- win11怎么设置不睡眠熄屏 |win11设置永不睡眠的方法】

文章目录 win11 怎么设置不睡眠熄屏 使用笔记本电脑的时候&#xff0c;如果离开电脑时间稍微长一点就会发现息屏了&#xff0c;下面介绍 设置 Win11 永不睡眠息屏的方法&#xff0c;有需要的朋友们快来看看以下详细的教程。 win11 怎么设置不睡眠熄屏 在电脑桌面上&#xff0c…

微信怎么设置自动回复?

自动回复的用处 微信自动回复可以提高沟通效率。当你无法立即回复消息时&#xff0c;设置自动回复可以让对方知道你的情况&#xff0c;并且不会因为长时间没有回复而产生误解或不满。 微信自动回复可以节省时间和精力。如果你经常收到类似的询问或回复&#xff0c;通过设置自动…

STM32CubeMX学习笔记(2)--DSP库的使用

1.DSP库简介 STM32的DSP库是为了支持数字信号处理应用而设计的&#xff0c;它包含了一系列优化的数学函数和算法&#xff0c;能够在STM32微控制器上高效地执行数字信号处理任务。 DSP库通常包括以下主要特性&#xff1a; 1.数学函数库&#xff1a; 包括各种基本的数学运算函数…

Python语言:猜数字游戏案例讲解

猜数字游戏题目要求如下&#xff1a;该程序随机生成一个1到100之间的整数&#xff0c;然后要求玩家在有限的次数内猜出这个数字。如果玩家猜对了&#xff0c;游戏结束并显示成功信息&#xff1b;如果玩家猜错了&#xff0c;程序会提示玩家猜的数字是偏大还是偏小&#xff0c;并…

O2OA(翱途)开发平台 V8.2已发布,更安全、更高效、更开放

尊敬的 O2OA (翱途) 平台合作伙伴、用户以及亲爱的开发小伙伴们&#xff0c;V8.2 版本已正式发布&#xff0c;大家可以去官网上下载最新版本。 上次 8.1 的发布是在 9 月 1 日&#xff0c;又过去两个多月&#xff0c;O2OA 研发团队始终踏踏实实地做好产品的研发及优化工作&…

③【List】Redis常用数据类型: List [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis List ③Redis List 操作命令汇总1. lpus…

6 Redis的慢查询配置

1、redis的命令执行流程 redis的慢查询只针对步骤3 默认情况下&#xff0c;慢查询的阈值是10ms 在配置文件中进行配置 //这个参数的单位为微秒 //如果将这个值设置为负数&#xff0c;则会禁用慢日志功能 //如果将其设置为0&#xff0c;则会强制记录每个命令 slowlog-log-slow…

ATFX汇市:非美货币扎堆升值,唯有USDCAD表现平平

ATFX汇市&#xff1a;10月4日至今&#xff0c;美元指数累计跌幅已经超过3.6%&#xff0c;最低触及103.18点&#xff0c;中期均线MA30被跌破&#xff0c;强势周期可能即将转变为弱势周期。随着美元的下跌&#xff0c;大部分非美货币快速升值&#xff0c;欧元、英镑、日元的升值幅…

Public Key Retrieval is not allowed客户端连接

使用DBeavear或navicat连接mysql服务器时&#xff0c;报错Public Key Retrieval is not allowed 原因&#xff1a; 客户端默认禁用 SSL/TLS 协议&#xff0c;客户端会使用服务器的公钥进行传输&#xff0c;默认情况下客户端不会主动去找服务器拿公钥&#xff0c;进而会出现…

Power Apps-Timer

插入一个计时器 右侧属性面板&#xff0c;持续时间的单位是毫秒&#xff0c;60000就是60秒&#xff08;一分钟&#xff09;&#xff1b;开启重复是指60秒结束后重新开始计时&#xff1b;自动启动是指当从其他页面进入时是否自动开始计时&#xff1b;自动暂停是指当离开这个页面…