【国产桌面操作系统】安装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)
更多推荐

所有评论(0)