当前位置: 首页 > news >正文

【国产桌面操作系统】安装mysql客户端及C/C++开发

前言

        统信UOS无法在线安装mysql客户端的驱动包,需要到官网下载离线包进行安装配置。

离线安装包下载

https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/

https://downloads.mysql.com/archives/c-c/https://downloads.mysql.com/archives/c-c/这个最后一张图片的连接,如果失效就按照上面的步骤逐步操作(本篇资源有这个包)。

安装mysql客户端

解压安装

解压后,只需要对include和lib目录进行操作

#在root用户权限下
#1.把include目录拷贝到/usr/include之下
cp -rf include /usr/include/mysql
#2.把lib目录下的libmysqlclient.so.18,拷贝到/usr/lib64/mysql/,并建一个软连接
mkdir /usr/lib64/mysql
cp lib/libmysqlclient.so.18 /usr/lib64/mysql/
cd /usr/lib64/mysql/
ln -s libmysqlclient.so libmysqlclient.so.18

如果不建立软连接,编译完程序之后,用ldd查看程序的动态库链接时,可能会提示:not found。

开发编译

gcc -g -o client   -I /usr/include/mysql mysqlc.c -L /usr/lib64/mysql -l mysqlclient-I /usr/include/mysql  指头文件所在位置
-L /usr/lib64/mysql    指库文件所在位置
-l mysqlclient         使用库mysqlclient (库文件名是libmysqlclient.so,库文件名是库名前加lib,后加.so)

注意,以上编译之前需要设置下环境

export LD_LIBRARY_PATH=/usr/lib64/mysql:$LD_LIBRARY_PATH

如果不想设置环境,就把libmysqlclient.so拷贝一份到系统默认的库路径里面,比如统信UOS和麒麟的默认目录都是

/lib/x86_64-linux-gnu/

开发样例

查询语句样例

#include <mysql.h>
//mysql数据库信息
typedef struct  mysqldbMsg
{std::string db_ip;std::string db_name;std::string db_user;std::string db_pwd;mysqldbMsg(){db_ip="";db_name="";db_user="";db_pwd="";}
} stmysqldbMsg;bool selecttable(stmysqldbMsg& st_sqldb){std::string numstr="0";char sqlstr[256]={0};sprintf(sqlstr,"SELECT COUNT(1) FROM mytable;",CputId.c_str());MYSQL mysql_conn; /* Connection handle */MYSQL_RES *mysql_result; /* Result handle */MYSQL_ROW mysql_row; /* Row data *///int /*f1, f2,*/ num_row=0, num_col=0;if (mysql_init(&mysql_conn) != NULL){if (mysql_real_connect(&mysql_conn, st_sqldb.db_ip.c_str(), st_sqldb.db_user.c_str(), st_sqldb.db_pwd.c_str(), st_sqldb.db_name.c_str(), 3306, NULL, 0) != NULL){//std::cout << __FUNCTION__ << " mysql_real_connect OK"  << std::endl;}else{std::cout << __FUNCTION__ << " mysql_real_connect fails"  << std::endl;return false;}}else{std::cout << __FUNCTION__ << " Initialization fails"  << std::endl;return false;}if (mysql_query(&mysql_conn, sqlstr) == 0){/*  查询表中所有记录*/mysql_result = mysql_store_result(&mysql_conn); // get the result from the executing select query//num_row = mysql_num_rows(mysql_result); /* Get the no. of row *///num_col = mysql_num_fields(mysql_result); /* Get the no. of column *///printf("num_row [%d], num_col [%d]\n", num_row, num_col);mysql_row = mysql_fetch_row(mysql_result); /* Fetch one by one */numstr=mysql_row[0];std::cout << __LINE__ << " count num:" << numstr << std::endl;// for (f1 = 0; f1 < num_row; f1++)// {//     for (f2 = 0; f2 < num_col; f2++)//     {//         mysql_row = mysql_fetch_row(mysql_result); /* Fetch one by one *///         printf("[Row %d, Col %d] ==> [%s]\n", f1, f2, mysql_row[f2]);//     }// }}else{printf("Query fails\n");}mysql_free_result(mysql_result);mysql_close(&mysql_conn);if(numstr=="0") return false;return true;
}

执行语句样例

bool execsql(const char* sqlstr,stmysqldbMsg& st_sqldb){MYSQL mysql_conn; /* Connection handle *///MYSQL_RES *mysql_result; /* Result handle */if (mysql_init(&mysql_conn) != NULL){if (mysql_real_connect(&mysql_conn, st_sqldb.db_ip.c_str(), st_sqldb.db_user.c_str(), st_sqldb.db_pwd.c_str(), st_sqldb.db_name.c_str(), 3306, NULL, 0) != NULL){std::cout << __FUNCTION__ << " mysql_real_connect OK"  << std::endl;}else{std::cout << __FUNCTION__ << " mysql_real_connect fail"  << std::endl;return false;}// 设置字符集为 utf8mb4---有中文时,一定要加这一项设置,不然中文变成乱码if (mysql_set_character_set(&mysql_conn, "utf8mb4")) {std::cerr << "mysql_set_character_set() failed\n";mysql_close(&mysql_conn);return false;}}else{std::cout << __FUNCTION__ << " Initialization fails"  << std::endl;return false;}if (mysql_query(&mysql_conn, sqlstr) == 0){//std::cout << __FUNCTION__ << " mysql_query OK:" << sqlstr << std::endl;}else{std::cout << __FUNCTION__ << " mysql_query fail:" << sqlstr  << std::endl;}//mysql_free_result(mysql_result);mysql_close(&mysql_conn);return true;
}

Makefile文件

CC        = g++
CFLAGS    =
DEBUGFLAG = -g -Wall
MACRO     =
#MACRO     = -D_DEBUG 
LIBDIRS   = -L./ -L /usr/lib64/mysql
LIBS      = -ldl -lmysqlclient
INCLUDE   = -I./ -I /usr/include/mysql   -I./lib   
MAKE_SO   = 
OPTIONS   = 
OBJDIR    =
SRCDIR    =
RUNOUTPUT = getdatabymysql
LIBOUTPUT =
OBJS      =  getdatabymysql.o default:$(RUNOUTPUT)clean:rm -f $(OBJS) $(RUNOUTPUT)install:cp -f $(RUNOUTPUT) ../../bin$(RUNOUTPUT):$(OBJS)$(CC)   -o $(RUNOUTPUT) $^ $(OPTIONS)  $(LIBDIRS) $(LIBS).cpp.o:$(CC) $(DEBUGFLAG) $(MACRO) -fPIC -c $< -o $@ $(CFLAGS) $(INCLUDE)

http://www.dtcms.com/a/395226.html

相关文章:

  • IntelliJ:找不到相关的 gradle 配置,请重新导入 Gradle 项目,然后重试。
  • 云计算微服务架构与容器化技术:服务网格与边缘计算融合实践
  • 飞牛NAS上搭建OpenWrt旁路由教程(适用于x86的Docker部署)
  • python14——函数
  • 14.Linux 硬盘分区管理及RAID存储技术
  • ★ Linux ★ 信号
  • macOS在IDEA里滚动行为混乱问题
  • ✨Vue 静态路由详解:构建应用的导航骨架(4)
  • 08-2Dcss动画
  • 使用IOT-Tree消息流Modbus Slave节点,实现Modbus设备的模拟
  • 创作者模式—单例设计模式
  • PostgreSQL 备份
  • SQL-多表查询
  • Hive SQL 中的时间戳转换详解
  • Linux笔记---select、poll、epoll总结对比
  • MySQL查询详细介绍
  • 面试题二:业务篇
  • Rust进阶-part8-迭代器
  • halcon3d gen_image_to_world_plan3_map与project_3d_point
  • Ellisys工具
  • Qwen3-7B-Instruct Windows LMStudio 部署
  • 【代码】关于C#支持文件和文本框的简单日志实现
  • atcoder经典好题
  • 【Linux】Linux文件系统详解:从磁盘到文件的奥秘
  • 【Android Keystore】Android 密钥库系统使用指南
  • RBAC权限模型实战图解:绘制企业权限矩阵,告别混乱授权
  • 【ROS2】通讯协议接口 Interface
  • Spring —— 事务控制
  • 基于vue开发的背单词网站
  • javascript 角色跟踪实践