首先安装开发库
sudo apt-get install libmysqlclient-dev,提示不存在
后来用 sudo apt install default-libmysqlclient-dev
发现安装了mariadb的库,也行,免费的减少商业纠纷
然后搜了一段代码,能够链接数据库,更新表格数据
#include "db.h"
MYSQL* dblink;
int init()
{
dblink = mysql_init(NULL);
if (dblink != NULL)
{
perror("mysql_init");
}
else
{
printf("mysql初始化失败\n");
return 1;
}
//mysql连接
const char* host = "192.168.64.235";
const char* user = "root";
const char* pwd = "123456";
const char* db_name = "tvm";
dblink = mysql_real_connect(dblink, host, user, pwd, db_name, 0, NULL, 0);
if (dblink != NULL)
{
printf("mysql_connect %s ok\n", db_name);
}
else
{
printf("mysql连接失败 %s\n", mysql_error(dblink));
return 2;
}
return 0;
}
void user_set_value(int cv)
{
char buf[100];
sprintf(buf, "UPDATE sys_codetable SET cvalue='%d' WHERE ckey='prevalidion_event_code';", cv);
mysql_query(dblink, buf);
}
int main()
{
printf("hello world, Harmony is coming!\n");
init();
user_get_all(dblink);
user_set_value(4);
user_get_all(dblink);
mysql_close(dblink);
return 0;
}
顺便验证下将函数提取到另一个文件db.c,避免主文件过大
#include "db.h"
void user_get_all(MYSQL* dblink)
{
MYSQL_RES* result;
MYSQL_ROW row;
char buf[100];
sprintf(buf, "SELECT ckey,cvalue from sys_codetable where ckey='prevalidion_event_code';");
mysql_query(dblink, buf);
result = mysql_store_result(dblink);
if (result == NULL)
{
//结果为空
mysql_free_result(result);
printf("null\n");
return;
}
int r = mysql_num_rows(result);
int c = mysql_num_fields(result);
printf("rows=%d fields=%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);
}
提取出来的文件需要一个头文件db.h
#include <mysql/mysql.h>
#include <stdio.h>
#ifndef DB_H
#define DB_H
void user_get_all(MYSQL* dblink);
#endif
将提取函数的文件放在编译命令里,mariadb库也需要放编译命令里,顺利编译成功
/usr/bin/g++ -fdiagnostics-color=always -g /home/qzc/hellc/hello.c /home/qzc/hellc/db.c -o /home/qzc/hellc/hello -lmariadb