远程连接MySQL并操作

配置MySQL开发环境

如果你使用的是基于Debian的系统(如Ubuntu),可以在终端通过如下步骤安装MySQL开发包。

更新软件包列表

运行以下命令以确保你拥有最新的软件包列表。

bash 复制代码
sudo apt-get update

安装libmysqlclient-dev开发包

执行以下命令以安装MySQL客户端开发包。

bash 复制代码
sudo apt-get install libmysqlclient-dev

检查安装的文件

确认mysql.h是否已经正确安装。通常,mysql.h会位于/usr/include/mysql/目录下。

bash 复制代码
ls /usr/include/mysql/mysql.h

编译程序时指定头文件路径

在编译时,确保编译器能找到mysql.h文件。可以通过-I标志指定头文件路径。

bash 复制代码
g++ my_program.c -o my_program -I /usr/include/mysql -lmysqlclient

使用API连接数据库并执行插入操作

代码

cpp 复制代码
#include <mysql.h>
#include <stdio.h>
#include <string.h>

#define WENDY_DB_SERVER_IP "192.168.32.162"  // 数据库服务器的 IP 地址
#define WENDY_DB_SERVER_PORT 3306             // 数据库服务器的端口号
#define WENDY_DB_PASSWORD "******"            // 数据库用户的密码(这里是真的密码,我手动打码了)
#define WENDY_DB_USERNAME "wendy"             // 数据库用户名
#define WENDY_DB_DEFAULTDB "wendy_db"         // 默认数据库名称

#define SQL_INSERT_TBL_USER "INSERT tbl_user(u_name,u_gender) VALUES('robot','man');"  // 要执行的 SQL 插入语句

int main(){
    MYSQL mysql;

    // 初始化 MySQL 连接句柄
    if(NULL==mysql_init(&mysql)){
        printf("mysql_init : %s\n",mysql_error(&mysql));  // 输出初始化错误信息
        return -1;  // 退出程序,返回错误代码 -1
    }

    // 连接到 MySQL 数据库
    if(!mysql_real_connect(&mysql, WENDY_DB_SERVER_IP, WENDY_DB_USERNAME, WENDY_DB_PASSWORD, WENDY_DB_DEFAULTDB, WENDY_DB_SERVER_PORT, NULL, 0)){
        printf("mysql_real_connect : %s\n",mysql_error(&mysql));  // 输出连接错误信息
        return -2;  // 退出程序,返回错误代码 -2
    }

    // 执行 SQL 查询(插入语句)
    if(mysql_real_query(&mysql, SQL_INSERT_TBL_USER, strlen(SQL_INSERT_TBL_USER))){
        printf("mysql_real_query : %s\n",mysql_error(&mysql));  // 输出执行查询错误信息
    }

    // 关闭 MySQL 连接
    mysql_close(&mysql);

    return 0; 
}

运行结果

终端
MySQL数据库

以下两图为运行mysql.cpp前后的数据库数据,可以看到tbl_user成功插入了一条数据。

使用API连接数据库并执行查询操作

代码

cpp 复制代码
#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>

#define WENDY_DB_SERVER_IP "192.168.32.162"  // 数据库服务器的 IP 地址
#define WENDY_DB_SERVER_PORT 3306             // 数据库服务器的端口号
#define WENDY_DB_PASSWORD "******"            // 数据库用户的密码
#define WENDY_DB_USERNAME "wendy"             // 数据库用户名
#define WENDY_DB_DEFAULTDB "wendy_db"         // 默认数据库名称

#define SQL_SELECT_TBL_USER "SELECT * FROM tbl_user;"  // 要执行的 SQL 查询语句

int wendy_mysql_select(MYSQL *mysql){
    // 执行 SQL 查询语句
    if(mysql_real_query(mysql, SQL_SELECT_TBL_USER, strlen(SQL_SELECT_TBL_USER))){
        printf("mysql_real_query : %s\n",mysql_error(mysql));  // 输出执行查询错误信息
        return -3;
    }

    // 获取查询结果
    MYSQL_RES *res = mysql_store_result(mysql);
    if(res == NULL){
        printf("mysql_store_result : %s\n", mysql_error(mysql)); 
        return -4;
    }

    // 获取结果集中的行数
    int rows = mysql_num_rows(res);
    printf("rows: %d\n", rows);

    // 获取结果集中的列数
    int fields = mysql_num_fields(res);
    printf("fields: %d\n", fields);

    // 遍历结果集的每一行
    MYSQL_ROW row;
    while((row = mysql_fetch_row(res))){
        int i = 0;
        for(i = 0; i < fields; i++){
            printf("%s\t", row[i]);  // 打印每个字段的值
        }
        printf("\n");
    }

    // 释放结果集内存
    mysql_free_result(res);

    return 0;
}

int main(){
    MYSQL mysql;

    // 初始化 MySQL 连接句柄
    if(mysql_init(&mysql) == NULL){
        printf("mysql_init 错误 : %s\n", mysql_error(&mysql));  // 输出初始化错误信息
        return -1;  
    }

    // 连接到 MySQL 数据库
    if(mysql_real_connect(&mysql, WENDY_DB_SERVER_IP, WENDY_DB_USERNAME, WENDY_DB_PASSWORD, WENDY_DB_DEFAULTDB, WENDY_DB_SERVER_PORT, NULL, 0) == NULL){
        printf("mysql_real_connect 错误 : %s\n", mysql_error(&mysql));  // 输出连接错误信息
        return -2;  
    }

    // 执行查询操作
    wendy_mysql_select(&mysql);

    // 关闭 MySQL 连接
    mysql_close(&mysql);

    return 0; 
}

运行结果

推荐一下

0voice · GitHub

相关推荐
有谁看见我的剑了?5 分钟前
ubuntu 22.04 /etc/fstab 文件修改有误导致无法进入系统处理
linux·运维·ubuntu
月昤昽7 分钟前
ArchLinux更新遇到的GPG签名验证问题
linux·bash·archlinux
L16247611 分钟前
临时拉高 CPU 利用率(防缩容)操作全总结(linux和windows系统)
linux·运维·windows
小松加哲13 分钟前
服务器LVM磁盘内部空闲空间无损扩容+挂载原理+MySQL Binlog自动清理完整实操
运维·mysql·服务器扩容
咸鱼梦想家π13 分钟前
Linux开发工具(中)
linux·运维·服务器
无敌秋14 分钟前
C++ 抽象工厂模式实战指南
开发语言·c++·抽象工厂模式
网络安全许木16 分钟前
自学渗透测试第29天(Linux SUID/SGID基础实验)
linux·运维·服务器·web安全·渗透测试
JiaWen技术圈19 分钟前
conntrack-tools 用法
linux·运维·服务器·安全·运维开发
IT界的老黄牛20 分钟前
MySQL 磁盘告警 1.2TB:从衣柜原理到 gh-ost 卧底,一次释放 540GB 的实战复盘
运维·数据库·mysql
deviant-ART20 分钟前
MySQL 实战:如何根据 ID 将表 B 的字段更新到表 A
数据库·mysql