Linux下c语言操作MySQL

开始之前

首先需要头文件

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

还有没安装的需要先执行

sudo apt-get install libmysqlclient-dev

使用<mysql/mysql.h>头文件在编译时需要加上-lmysqlclient -I/usr/include/mysql/ -L/usr/lib/mysql

使用c语言操作数据库

使用前要先和mysql服务器建立连接,c语言使用MYSQL结构体作为与mysql服务器的连接,并用mysql_init函数进行初始化。
使用mysql_real_connnect函数与mysql服务器建立连接,其中host代表服务器地址,设置为localhost代表本地mysql服务器。user与pwd分别为用户名即密码。db_name代表数据库的名称。
例如按照下方代码相当于在命令行中执行mysql -hlocalhost -uroot -p112188 db,连接成功后进入本地的db数据库。

MYSQL* connection;

int init()
{
    connection = mysql_init(NULL);
    if (connection != NULL)
    {
        perror("mysql_init");
    }
    else
    {
        printf("mysql初始化失败\n");
        exit(0);
    }

    //mysql连接
    const char *host = "localhost";
    const char *user = "root";
    const char *pwd = "112188";
    const char *db_name = "db";

    connection = mysql_real_connect(connection, host, user, pwd, db_name, 0, NULL, 0);
    if (connection != NULL)
    {
        perror("mysql_connect");
    }
    else
    {
        printf("mysql连接失败");
        exit(0);
    }
}

进入之后使用mysql_query(connection, buf)操作数据库,connection为之前建立的连接,buf为命令,类型为char*
例如下方代码的函数可以实现将db数据库中users表中id为userid的行的name列设为给定的name。
比如说调用user_set_name(123, "张三")可以将123号用户的用户名设置为张三。

void user_set_name(int userid, const char *name)
{
	char buf[100];
    sprintf(buf, "UPDATE users SET name='%s' WHERE id=%d;", name, userid);
    mysql_query(connection, buf);
}

对于有返回信息的命令,c语言使用MYSQL_RES代表从数据库中返回的结果,MYSQL_ROW表示从数据库中返回的一行。调用mysql_store_result(connection)
可以返回上次使用mysql_query(connection, buf)后返回的结果指针。
不难想象返回的结果可以看成矩阵的形式。调用mysql_num_rows(result)获取结果的行数,mysql_num_fields(result)获取结果的列数。
调用mysql_fetch_row(result)可以获取矩阵中的一行,MYSQL_ROWchar**类型,即代表一行字符串,每次调用都会获取新的一行。

使用结束后请务必调用mysql_free_result(result)来释放结果,不然会影响下一次的使用。

例如下列user_get_all()会获取并打印users表中的所有信息。

void user_get_all()
{
	MYSQL_RES* result;
	MYSQL_ROW row;
	char buf[100];
    sprintf(buf, "SELECT a FROM users;");
    mysql_query(connection, buf);
    result = mysql_store_result(connection);
    if (result == NULL)
    {
 		//结果为空
 		mysql_free_result(result);
        printf("null\n");
        return;
    }
    
    int r = mysql_num_rows(result);
    int c = mysql_num_fields(result);
    printf("%d %d\n", r, c);

    for (int i = 0; i < r; ++i)
    {
        row = mysql_fetch_row(result);
        for (int j = 0; j < c; ++j)
        {
            if (row[j] == NULL) printf("null ");
            else printf("%s ", row[j]);
        }
        printf("\n");
    }
    mysql_free_result(result);
}

创建a.c文件,其main函数为

int main()
{
    init();
    user_get_all();
}

编译运行结果如下
图片

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值