Qt 是一个跨平台的 C++ 应用程序框架,广泛用于桌面、移动和嵌入式系统的开发。SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上安全地运行网络服务。
MySQL 是一个流行的关系型数据库管理系统,广泛用于各种应用程序的数据存储和管理。
以下是一个简单的示例代码,展示如何使用 Qt 和 libssh 连接到远程 MySQL 数据库:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <libssh/libssh.h>
void connectToMySQL(const QString &host, const QString &username, const QString &password, const QString &database) {
// 初始化 SSH 会话
ssh_session session = ssh_new();
if (!session) {
qCritical("Failed to create SSH session");
return;
}
// 设置 SSH 连接参数
ssh_options_set(session, SSH_OPTIONS_HOST, host.toStdString().c_str());
ssh_options_set(session, SSH_OPTIONS_USER, username.toStdString().c_str());
// 连接到 SSH 服务器
int rc = ssh_connect(session);
if (rc != SSH_OK) {
qCritical("Failed to connect to SSH server: %s", ssh_get_error(session));
ssh_free(session);
return;
}
// 进行 SSH 密钥验证
rc = ssh_userauth_password(session, nullptr, password.toStdString().c_str());
if (rc != SSH_AUTH_SUCCESS) {
qCritical("Authentication failed: %s", ssh_get_error(session));
ssh_disconnect(session);
ssh_free(session);
return;
}
// 获取 SSH 会话的 socket
int sock = ssh_get_transport(session)->socket;
// 配置 MySQL 数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(host);
db.setUserName(username);
db.setPassword(password);
db.setDatabaseName(database);
db.setPort(3306);
// 使用 SSH 隧道连接到 MySQL
db.setConnectOptions(QString("MYSQL_HOST=%1;MYSQL_PORT=%2;MYSQL_SOCKET=%3")
.arg(host)
.arg(3306)
.arg(sock));
// 打开数据库连接
if (!db.open()) {
qCritical("Failed to open database: %s", db.lastError().text().toStdString().c_str());
} else {
qDebug() << "Connected to MySQL database successfully!";
QSqlQuery query;
query.exec("SELECT * FROM your_table");
while (query.next()) {
qDebug() << query.value(0).toString();
}
}
// 关闭数据库连接和 SSH 会话
db.close();
ssh_disconnect(session);
ssh_free(session);
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
connectToMySQL("your_host", "your_username", "your_password", "your_database");
return a.exec();
}通过以上步骤和代码示例,你应该能够成功使用 Qt 和 SSH 连接到远程 MySQL 数据库。