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.hqwc.cn/news/206518.html

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

相关文章

技术分享| gcc版本升级到5.2

一、介绍 GCC&#xff08;GNU Compiler Collection&#xff09;是一套广泛使用的开源编译器集合&#xff0c;用于编译多种编程语言&#xff0c;包括C、C、Objective-C、Fortran等。GCC 的不同版本提供了许多新功能、改进和修复&#xff0c;其中包括从 GCC 4.8.5 升级到 GCC 5.…

Python Pandas简介及基础教程+实战示例。

文章目录 前言一、Pandas简介二、Python Pandas的使用关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Pan…

Oracle:poor sql导致的latch: cache buffers chains案例

巡检时&#xff0c;执行如下sql发现长会话&#xff1a; SELECT SE.SID,SE.SERIAL#,TO_CHAR(LOGON_TIME,YYYY-MM-DD HH24:MI:SS),SE.STATUS,SE.OSUSER,SE.MACHINE,SE.PROGRAM,SE.BLOCKING_SESSION, SE.SQL_ID,SE.PREV_SQL_ID ,SE.EVENT,SE.P1TEXT,SE.P1,SE.P2TEXT,SE.P2,SE.P3…

JOSEF信号继电器 JX-18A/2 电压 220VAC辅助电源 板后接线

JX-18/2A系列信号继电器 JX-18A/2A1信号继电器&#xff1b; JX-18A/2A2信号继电器&#xff1b; JX-18B /2A1信号继电器; JX-18B/2A2信号继电器; JX-18C/2A1信号继电器; JX-18C/2A2信号继电器; JX-18E/2A1信号继电器; JX-18E/2A2信号继电器; JX-18D/2A1信号继电器; JX…

c++ 谓词

1. 一元谓词 #include <iostream> #include<vector> #include<algorithm>using namespace std;class CreaterFive{ public:bool operator()(int val){return val>5;} };int main() {vector<int> vec;for(int i0; i<10; i){vec.push_back(i);}ve…

java继承和重写(代码演示)

java中的继承和重写 概念 继承 在 Java 中&#xff0c;继承是面向对象编程中的重要概念&#xff0c;它允许一个类&#xff08;称为子类&#xff09;继承另一个类&#xff08;称为父类&#xff09;的属性和方法。子类可以继承父类的非私有属性和方法&#xff0c;并且可以添加…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧&#xff0c;一般这种需求我们在我们的客户端不太常见&#xff0c;但是&#xff0c;我们在后端进行各种数据统计的时候就会发现ECharts的优点了&#xff0c;比如我们常常做的柱状图&#xff0c;折线图&#xff0c;雷达图等可视化形式&…

git clone慢的解决办法

在网站 https://www.ipaddress.com/ 分别搜索&#xff1a; github.global.ssl.fastly.net github.com 得到ip&#xff1a; 打开hosts文件 sudo vim /etc/hosts 在hosts文件末尾添加 140.82.114.3 github.com 151.101.1.194 github.global-ssl.fastly.net 151.101.65.194 g…

【UE5】蓝图

在开发过程中&#xff0c;不可避免地会有一些蓝图的操作。同时&#xff0c;蓝图也是UE很有特色的一个内容。 了解蓝图是什么&#xff08;What is BP?&#xff09; 广义上&#xff1a;蓝图是UE内置的脚本语言&#xff0c;可以书写类似代码的逻辑。&#xff08;任何可以连那种块…

SAE 2.0,让容器化应用开发更简单

云布道师 云原生这个概念从提出&#xff0c;到壮大&#xff0c;再到今天的极大普及&#xff0c;始终处于一个不断演进和革新的过程中。云原生体系下应用的托管形态是随着企业应用架构在不断演进的。最早的应用大多是集中式、单体式的&#xff0c;应用通过优雅的分层来实现领域…

如何在windows使用别名远程执行命令

需求背景 在开发中,需要在服务器执行脚本,需要如下几步操作: 1.打开xshell 2.登录服务器 3.进入命令脚本的路径 4.执行脚本 但是,作为懒人来说,操作太繁琐了,真麻烦,能不能一键就解决那么多操作?所以,开始研究windows有没有这个东西,而且不需要额外的软件就可以实现的.结…

如何查找批量企业的联系方式?

​我们都知道&#xff0c;企业的联系方式在企业的年报中就能找到&#xff0c;但是年报上的电话真的是你要找的吗&#xff1f; 很多企业年报上留的是第三方代记账公司&#xff0c;或者是其他没用的号码&#xff0c;这对于做B端业务的企业来说是不够精准的。 市面上有很多做企业…