时间:2021-07-01 10:21:17 帮助过:21人阅读
我在另一台机器上需要连接数据库,我不能将root 密码告诉别人,而是创建了一个数据库,再创建一个用户,这个用户在对应的数据库中有类似DBA 的权限,可以对所有变执行增删改查,同时可以创建表,修改表结构。
delimiter $$ CREATE DATABASE `CRM` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION=‘N‘ */$$
创建用户,赋权限
create user ‘user1‘@‘%‘ identified by ‘123456‘; GRANT ALL ON CRM.* TO ‘CRM‘@‘%‘;
创建表和存储过程。(为了简单我只给出表结构和存储过程在MySQL Workbench中的截图)
接下来我需要用到 MySQL提供的 API 函数进行操作了。
具体代码可以看这里 https://github.com/danielhu1983/Tools/tree/master/MySQLSample 下的代码
1. MySQL connection 类
调用 mysql_init 初始化connection
调用 mysql_real_connect 连接数据库
最后使用 mysql_close 关闭连接
2. MySQL DBHelper 类
提供Init 接口,调用 MySQL connection 的 init 方法,connect 方法
提供Exec 接口,调用 mysql_real_query 执行 SQL 命令
3. main 函数
调用MySQL DBHelper中的 init 函数和 exec 函数。
Makefile 中,
我需要再次单独指定需要查找头文件的路径。
MYSQL_ROOT = /daniel/mysql
HEADER_PATH=-I$(MYSQL_ROOT)/include
这只是编译用的,最终link 的时候还需要指定用到的 so 文件。这时候我从安装了 MySQL Server 的机器中执行如下命令,得到输出结果
[daniel@daniel ~]$ mysql_config --libs -L/mysql/mysqlroot/lib -Wl,-R,/mysql/mysqlroot/lib -lmysqlclient -lpthread -lm -lrt -lssl -lcrypto -ldl [daniel@daniel ~]$
上边红色高亮部分,在我没安装 MySQL 的机器上要改为对应的目录,比如我的 Makefile 文件中是这么写的
LIBS=-L$(MYSQL_ROOT)/lib -Wl,-R,$(MYSQL_ROOT)/lib -lmysqlclient -lpthread -lm -lrt -lssl -lcrypto -ldl
然后在机器中执行 make 命令,生成的可执行文件为 MySQL.1.0.0.1
在使用前,我需要在我的环境中配置好环境变量,打开 home 目录下的 .bash_profile 文件
export MYSQL_HOME=/daniel/mysql
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
这里我指定了LD_LIBRARY_PATH的路径,让程序可以从/daniel/mysql/lib 目录下找到MySQL 对应的lib库
代码中的SQL 我使用的是调用存储过程,所以最后结果可能是这样
[daniel@daniel2 MySQLSample]$ ./MySQL.1.0.0.1
1 Daniel
2 Daniel
完成收工。
Linux 下C++ 操作 MySQL
标签:$path col -- pthread 执行 ica ldl init ibm