当前位置: 首页 > news >正文

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。

目录

1. 启动Mysql数据库服务器

2.查看QT支持的数据库驱动

3.连接数据库

4. 增加表和记录

5. 删除记录

6. 修改记录

7. 查询记录

8.完整代码和运行效果

常见错误总结:

(1) 数据库服务没启动报错信息

(2) 有QMYSQL驱动,连接数据缺失败


1. 启动Mysql数据库服务器

// 启动

sudo /etc/init.d/mysql start

// 重启

sudo /etc/init.d/mysql restart

// 关闭

sudo /etc/init.d/mysql stop

2.查看QT支持的数据库驱动

Qt SQL模块是Qt提供的一个访问数据库的接口,支持多种平台下使用不同类型的数据库,在这个过程中,数据库驱动起到了很大的作用,它负责与不同的数据库进行通信,有了数据库驱动,我们才能使用不同类型的数据库。

#include <QtSql/QSqlDatabase>// 查看支持的数据库驱动
qDebug() << QSqlDatabase::drivers();

3.连接数据库

QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection")) {db = QSqlDatabase::database("qt_sql_default_connection");
}
else {// 创建一个数据库连接,指定数据库驱动db = QSqlDatabase::addDatabase("QMYSQL");
}// 数据库连接需要设置的信息
db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑
db.setDatabaseName("TestDB");// 数据库名
db.setUserName("root");// 用户名
db.setPassword("mysql");// 密码
db.setPort(3306);// 端口号// 连接数据库
bool ok = db.open();if (ok) {qDebug() << "连接成功";
}
else {qDebug() << "连接失败";
}

4. 增加表和记录

// 实例化QSqlQuery,用于执行sql语句
QSqlQuery query(m_db);
// 创建一个表
query.exec("create table newUser (id int primary key, username varchar(20))");
QSqlQuery query(m_db);
query.exec("INSERT INTO newUser (id, username) VALUES (1, 'Hello')");int userid = 2;
QString &&name = "张三";
query.prepare("INSERT INTO newUser (id, username) VALUES (:id, :username)");
query.bindValue(":id", userid);
query.bindValue(":username", name);
query.exec();query.exec("INSERT INTO newUser (id, username) VALUES (3, 'Andy')");
query.exec("INSERT INTO newUser (id, username) VALUES (4, '李四')");

5. 删除记录

QSqlQuery query(m_db);
query.prepare("DELETE FROM newUser WHERE username=:username");
query.bindValue(":username", "张三");
query.exec();

6. 修改记录

QSqlQuery query(m_db);
query.prepare("update newUser set username=:username WHERE id=:id");
query.bindValue(":id", 1);
query.bindValue(":username", "World");
query.exec();

7. 查询记录

  // 查询所有QString sql = "SELECT id, username FROM newUser" ; // 组装sql语句QSqlQuery query(m_db);                               // [1] 传入数据库连接query.exec(sql);                                   // [2] 执行sql语句while (query.next()) {                             // [3] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}// 查询指定记录QString username = "李四";sql = "SELECT * FROM newUser WHERE username='" + username + "'";query.exec(sql);        // [2] 执行sql语句while (query.next()) {  // [3] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}// 绑定数据查询username = "张三";sql = "SELECT * FROM newUser WHERE username=:username";query.prepare(sql);                     // [2] 使用名称绑定的方式解析 SQL 语句query.bindValue(":username", username); // [3] 把占位符替换为传入的参数query.exec();                           // [4] 执行数据库操作while (query.next()) {                  // [5] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}

8.完整代码和运行效果

qt_mysql.pro

#-------------------------------------------------
#
# Project created by QtCreator 2023-09-05T23:12:20
#
#-------------------------------------------------QT       += core gui
QT += sqlgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = qt_mysql
TEMPLATE = app# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QDebug>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_clear_table_clicked();private:void createConnectionByName(const QString &connectionName); //使用自定义 connectionName 创建连接QSqlDatabase getConnectionByName(const QString &connectionName);  // 使用自定义 connectionName 获取连接private:Ui::MainWindow *ui;QSqlDatabase m_db;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlQuery>/*
Qt SQL模块是Qt提供的一个访问数据库的接口,支持多种平台下使用不同类型的数据库,在这个过程中,
数据库驱动起到了很大的作用,它负责与不同的数据库进行通信,有了数据库驱动,我们才能使用不同类型的数据库。*/MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建名为 firstMysqlConnect 的数据库连接createConnectionByName("firstMysqlConnect");
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{// 查看支持的数据库驱动qDebug() << QSqlDatabase::drivers();
}//使用自定义 connectionName 创建连接
void MainWindow::createConnectionByName(const QString &connectionName){m_db = QSqlDatabase::addDatabase("QMYSQL", connectionName);// 数据库连接需要设置的信息m_db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑m_db.setDatabaseName("TestDB");// 数据库名m_db.setUserName("root");// 用户名m_db.setPassword("mysql");// 密码m_db.setPort(3306);// 端口号// 连接数据库判断bool ok = m_db.open();if (ok){qDebug() << "连接成功";} else {qDebug() << "连接失败";}}// 使用自定义 connectionName 获取连接
QSqlDatabase MainWindow::getConnectionByName(const QString &connectionName) {// 获取数据库连接return QSqlDatabase::database(connectionName);
}void MainWindow::on_pushButton_2_clicked()
{QSqlDatabase db;if(QSqlDatabase::contains("qt_sql_default_connection")) {db = QSqlDatabase::database("qt_sql_default_connection");}else {// 创建一个数据库连接,指定数据库驱动db = QSqlDatabase::addDatabase("QMYSQL");}// 数据库连接需要设置的信息db.setHostName("127.0.0.1"); // 数据库服务器IP,我用的是本地电脑db.setDatabaseName("TestDB");// 数据库名db.setUserName("root");// 用户名db.setPassword("mysql");// 密码db.setPort(3306);// 端口号// 连接数据库bool ok = db.open();if (ok) {qDebug() << "连接成功";}else {qDebug() << "连接失败";}
}void MainWindow::on_pushButton_3_clicked()
{// 实例化QSqlQuery,用于执行sql语句QSqlQuery query(m_db);// 创建一个表query.exec("create table newUser (id int primary key, username varchar(20))");
}void MainWindow::on_pushButton_4_clicked()
{QSqlQuery query(m_db);query.exec("INSERT INTO newUser (id, username) VALUES (1, 'Hello')");int userid = 2;QString &&name = "张三";query.prepare("INSERT INTO newUser (id, username) VALUES (:id, :username)");query.bindValue(":id", userid);query.bindValue(":username", name);query.exec();query.exec("INSERT INTO newUser (id, username) VALUES (3, 'Andy')");query.exec("INSERT INTO newUser (id, username) VALUES (4, '李四')");
}void MainWindow::on_pushButton_5_clicked()
{QSqlQuery query(m_db);query.prepare("DELETE FROM newUser WHERE username=:username");query.bindValue(":username", "张三");query.exec();
}void MainWindow::on_pushButton_6_clicked()
{QSqlQuery query(m_db);query.prepare("update newUser set username=:username WHERE id=:id");query.bindValue(":id", 1);query.bindValue(":username", "World");query.exec();
}void MainWindow::on_pushButton_7_clicked()
{// 查询所有QString sql = "SELECT id, username FROM newUser" ; // 组装sql语句QSqlQuery query(m_db);                               // [1] 传入数据库连接query.exec(sql);                                   // [2] 执行sql语句while (query.next()) {                             // [3] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}// 查询指定记录QString username = "李四";sql = "SELECT * FROM newUser WHERE username='" + username + "'";query.exec(sql);        // [2] 执行sql语句while (query.next()) {  // [3] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}// 绑定数据查询username = "张三";sql = "SELECT * FROM newUser WHERE username=:username";query.prepare(sql);                     // [2] 使用名称绑定的方式解析 SQL 语句query.bindValue(":username", username); // [3] 把占位符替换为传入的参数query.exec();                           // [4] 执行数据库操作while (query.next()) {                  // [5] 遍历查询结果qDebug() << QString("Id: %1, Username: %2").arg(query.value("id").toInt()).arg(query.value("username").toString());}
}void MainWindow::on_pushButton_clear_table_clicked()
{QSqlQuery query(m_db);query.exec("DELETE FROM newUser");
}

main.cpp

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>693</width><height>412</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralWidget"><layout class="QGridLayout" name="gridLayout"><item row="0" column="0"><widget class="QPushButton" name="pushButton"><property name="text"><string>查看数据库驱动</string></property></widget></item><item row="0" column="1"><widget class="QPushButton" name="pushButton_2"><property name="text"><string>连接mysql数据库</string></property></widget></item><item row="1" column="0"><widget class="QPushButton" name="pushButton_3"><property name="text"><string>创建表</string></property></widget></item><item row="1" column="1"><widget class="QPushButton" name="pushButton_4"><property name="text"><string>插入记录</string></property></widget></item><item row="2" column="0"><widget class="QPushButton" name="pushButton_5"><property name="text"><string>删除记录</string></property></widget></item><item row="2" column="1"><widget class="QPushButton" name="pushButton_6"><property name="text"><string>修改记录</string></property></widget></item><item row="3" column="0"><widget class="QPushButton" name="pushButton_7"><property name="text"><string>查询记录</string></property></widget></item><item row="3" column="1"><widget class="QPushButton" name="pushButton_clear_table"><property name="text"><string>删除表中所有数据</string></property></widget></item></layout></widget><widget class="QMenuBar" name="menuBar"><property name="geometry"><rect><x>0</x><y>0</y><width>693</width><height>39</height></rect></property></widget><widget class="QToolBar" name="mainToolBar"><attribute name="toolBarArea"><enum>TopToolBarArea</enum></attribute><attribute name="toolBarBreak"><bool>false</bool></attribute></widget><widget class="QStatusBar" name="statusBar"/></widget><layoutdefault spacing="6" margin="11"/><resources/><connections/>
</ui>

常见错误总结:

(1) 数据库服务没启动报错信息

(2) 有QMYSQL驱动,连接数据缺失败

原因:Qt对Mysql进行了封装,库名为libqsqlmysql.so,但是其还需要调用Mysql的客户端库才能真正连接数据库,如下可以看到libqsqlmysql.so需要依赖libmysqlclient.so.18。

相关文章:

Ubuntu下QT操作Mysql数据库

本篇总结一下一下Ubuntu下QT操作Mysql数据库。 目录 1. 启动Mysql数据库服务器 2.查看QT支持的数据库驱动 3.连接数据库 4. 增加表和记录 5. 删除记录 6. 修改记录 7. 查询记录 8.完整代码和运行效果 常见错误总结&#xff1a; (1) 数据库服务没启动报错信息 (2) 有…...

sqli --【1--10】

Less-1&#xff08;联合查询&#xff09; 1.查看是否有回显 2.查看是否有报错 3.使用联合查询&#xff08;字符注入&#xff09; 3.1判断其列数 3.2 判断显示位置 3.3敏感信息查询 Less-2&#xff08;联合查询&#xff09; 1.查看是否有回显 2.查看是否有报错 3.使用…...

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Wireshark 用命令行分析数据包

1&#xff0c;那些情况需要使用命令行 Wireshark一次性提供了太多的信息。使用命令行工具可以限制打印出的信息&#xff0c;最后只显示相关数据&#xff0c;比如用单独一行来显示IP地址。命令行工具适用于过滤数据包捕获文件&#xff0c;并提供结果给另一个支持UNIX管道的工具…...

LVS DR模式负载均衡群集部署

目录 1 LVS-DR 模式的特点 1.1 数据包流向分析 1.2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2.1 配置负载调度器 2.1.1 配置虚拟 IP 地址 2.1.2 调整 proc 响应参数 2.1.3 配置负载分配策略 2.2 部署共享存储 2.3 配置节点服务器 2.3.1 配置虚拟 IP 地址 2.3.2…...

探讨前后端分离开发的优势、实践以及如何实现更好的用户体验?

随着互联网技术的迅猛发展&#xff0c;前后端分离开发已经成为现代软件开发的一种重要趋势。这种开发模式将前端和后端的开发工作分开&#xff0c;通过清晰的接口协议进行通信&#xff0c;旨在优化开发流程、提升团队协作效率&#xff0c;并最终改善用户体验。本文将深入探讨前…...

微博一面:JVM预热,你的方案是啥?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如微博、阿里、汽车之家、极兔、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; JVM预热&#xff0c;你的方案是啥&#xff1f;Springb…...

open与fopen的区别

1. 来源 从来源的角度看&#xff0c;两者能很好的区分开&#xff0c;这也是两者最显而易见的区别&#xff1a; open是UNIX系统调用函数&#xff08;包括LINUX等&#xff09;&#xff0c;返回的是文件描述符&#xff08;File Descriptor&#xff09;&#xff0c;它是文件在文件…...

Unity记录一些glsl和hlsl的着色器Shader逆向代码

以下内容一般基于 GLSL 300 之后 以下某些代码行&#xff0c;是“伪代码“&#xff0c;绝大部分是renderDoc 逆向产生标准代码 本人OpenlGL零基础&#xff0c;也不打算重头学 目录 Clip&#xff08;&#xff09; 剔除函数 discard; FS最终颜色输出 out 和最终颜色相加方程…...

基于Sentinel的微服务保护

前言 Sentinel是Alibaba开源的一款微服务流控组件&#xff0c;用于解决分布式应用场景下服务的稳定性问题。Sentinel具有丰富的应用场景&#xff0c;它基于流量提供一系列的服务保护措施&#xff0c;例如多线程秒杀情况下的系统承载&#xff0c;并发访问下的流量控制&#xff…...

Collectors类作用:

一、Collectors类&#xff1a; 1.1、Collectors介绍 Collectors类&#xff0c;是JDK1.8开始提供的一个的工具类&#xff0c;它专门用于对Stream操作流中的元素各种处理操作&#xff0c;Collectors类中提供了一些常用的方法&#xff0c;例如&#xff1a;toList()、toSet()、to…...

LASSO回归

LASSO回归 LASSO(Least Absolute Shrinkage and Selection Operator&#xff0c;最小绝对值收敛和选择算子算法)是一种回归分析技术&#xff0c;用于变量选择和正则化。它由Robert Tibshirani于1996年提出&#xff0c;作为传统最小二乘回归方法的替代品。 损失函数 1.线性回…...

机器学习中的 K-均值聚类算法及其优缺点。

K-均值聚类算法是一种常见的无监督学习算法&#xff0c;它可以将数据集分成 K 个簇&#xff0c;每个簇内部的数据点尽可能相似&#xff0c;而不同簇之间的数据点应尽可能不同。下面详细讲解 K-均值聚类算法的优缺点&#xff1a; 优点&#xff1a; 简单易用&#xff1a;K-均值…...

云计算与虚拟化

一、概念 什么是云计算&#xff1f; 云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;通过多部服务器组成的系统进行处理和分析这些小程序得到结果…...

Linux常见进程类别

目录 常见进程类别 守护进程&精灵进程 任务管理 进程组 作业 作业 | 进程组 会话 w命令 守护进程 守护进程的创建 setsid()函数 daemon()函数 模拟实现daemon函数 前台进程 | 后台进程 僵尸进程 | 孤儿进程 僵尸进程的一些细节 守护进程 | 后台进程 守护…...

智能小车之蓝牙控制并测速小车、wife控制小车、4g控制小车、语音控制小车

目录 1. 蓝牙控制小车 2. 蓝牙控制并测速小车 3. wifi控制测速小车 4. 4g控制小车 5. 语音控制小车 1. 蓝牙控制小车 使用蓝牙模块&#xff0c;串口透传蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a; 透传即透明传送&#xff0c;是指在数据的传输过…...

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接…...

c# sql 判断表中是否包含指定字段

你可以使用以下方法来判断一个 SQL 数据库中的表是否包含指定的字段。 首先&#xff0c;你需要连接到数据库&#xff0c;然后执行一条 SQL 查询语句来检查表结构。你可以使用 SELECT 语句和 INFORMATION_SCHEMA.COLUMNS 系统视图来获取表中的所有列信息。 下面是一个示例代码…...

08-JVM垃圾收集器详解

上一篇&#xff1a;07-垃圾收集算法详解 如果说收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现&#xff0c;更加没…...

sql_mode详解

文章目录 一、sql_mode作用二、查询sql_mode三、mysql8默认的mode配置&#xff08;6个默认配置&#xff09;四、常见mode详细解释mysql8默认配置了的mode&#xff08;6个&#xff09;需要自己配置的mode&#xff08;4个&#xff09; 五、设置sql_mode&#xff08;一旦设置了&am…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...