Linux下 C语言连接和操作MySQL数据库

一、安装MySQL

1、使用包管理器安装MySQL

sudo apt update
sudo apt install mysql-server

2、启动MySQL服务:

sudo systemctl start mysql

3、检查MySQL服务状态:

sudo systemctl status mysql

二、安装MySQL开发库

sudo apt-get install libmysqlclient-dev

三、程序编写

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;
    const char *server = "localhost";
    const char *user = "myname";
    const char *password = "mypwd"; // 替换为你的MySQL myname密码
    const char *database = "testdb"; // 替换为你的数据库名

    char query[256];

    // 初始化MySQL连接
    conn = mysql_init(NULL);
    if (!conn) {
        fprintf(stderr, "mysql_init() failed\n");
        exit(1);
    }
    
    // 连接到MySQL服务器
    if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 创建数据库表
    sprintf(query, "CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255))");
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 插入数据
    sprintf(query, "INSERT INTO users (username, password) VALUES ('user1', 'pass1')");
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    // 查询数据
    sprintf(query, "SELECT * FROM users");
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s\n", mysql_error(conn));
        exit(1);
    }

    res = mysql_store_result(conn);
    printf("ID\tUSERNAME\tPASSWORD\n");
    while ((row = mysql_fetch_row(res)) != NULL) {
        printf("%s\t%s\t%s\n", row[0], row[1], row[2]);
    }
    mysql_free_result(res);

    // 关闭MySQL连接
    mysql_close(conn);

    return 0;
}

编译C程序
使用gcc编译你的C程序,并链接MySQL客户端库:

g++ -o mysql_program your_program.c $(mysql_config --cflags --libs)

如果使用cmake,CmakeLists.txt是

cmake_minimum_required(VERSION 3.0)
project(mysql_program)

# 查找MySQL配置程序
find_program(MYSQL_CONFIG mysql_config)

# 获取MySQL编译和链接标志
execute_process(COMMAND ${MYSQL_CONFIG} --cflags OUTPUT_VARIABLE MYSQL_CFLAGS)
execute_process(COMMAND ${MYSQL_CONFIG} --libs OUTPUT_VARIABLE MYSQL_LIBS)

# 去除字符串中的前后空格和换行符
string(STRIP "${MYSQL_CFLAGS}" MYSQL_CFLAGS)
string(STRIP "${MYSQL_LIBS}" MYSQL_LIBS)

# 添加源文件
add_executable(mysql_program your_program.cpp)

# 添加MySQL编译和链接标志
target_compile_options(mysql_program PRIVATE ${MYSQL_CFLAGS})
target_link_libraries(mysql_program PRIVATE ${MYSQL_LIBS})

数据库准备

创建不需要sudo的用户

sudo mysql -u root
CREATE DATABASE testdb; # 创建测试数据库
create user 'myname'@'localhost' identified by 'mypwd'; #创建新用户
grant all privileges on testdb.* to 'myname'@'localhost';#赋予权限
mysql -u myname -p #使用新用户连接数据库,不需要sudo

运行

服务

MySQL 开机自启

启用自启

sudo systemctl enable mysql

禁用自启

sudo systemctl disable mysql

MySQL 手动启用

启动服务

sudo systemctl start mysql
# 或者
sudo systemctl start mysql.service
# 或者
sudo systemctl start mariadb.service

停止服务

sudo systemctl stop mysql
# 或者
sudo systemctl stop mysql.service
# 或者
sudo systemctl stop mariadb.service

查看MySQL服务状态

sudo systemctl status mysql
# 或者
sudo systemctl status mysql.service
# 或者
sudo systemctl status mariadb.service
posted @ 2025-01-13 20:32  丘狸尾  阅读(210)  评论(0)    收藏  举报