linux环境下写C++操作mysql(二)
main.cpp
- #include<stdio.h>
- #include<stdlib.h>
- #include"mysqlInterface.h"
- int main()
- {
- CMysqlInterface mysqlObj;
- mysqlObj.connect();
- return ;
- }
mysqlInterface.h
- class CMysqlInterface
- {
- public:
- CMysqlInterface();
- ~CMysqlInterface();
- int connect();
- private:
- MYSQL* mysqlPtr;
- };
mysqlInterface.cpp
- #include"mysqlInterface.h"
- CMysqlInterface::CMysqlInterface()
- {
- printf("CMysqlInterface\n");
- mysqlPtr = NULL;
- mysqlPtr = mysql_init(NULL);
- if(!mysqlPtr)
- {
- printf("mysql_init failed\n");
- }
- }
- CMysqlInterface::~CMysqlInterface()
- {
- mysql_close(mysqlPtr);
- mysqlPtr = NULL;
- }
- int CMysqlInterface::connect()
- {
- int iRet = -;
- mysql_real_connect(mysqlPtr,"localhost","root","csql","child",,NULL,);
- if(!mysqlPtr)
- {
- printf("connect failed\n");
- }
- else
- {
- printf("connect success\n");
- iRet = ;
- }
- return iRet;
- }
Makefile:
- Makefile文件
- test : main.o mysqlInterface.o
- g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- main.o:main.cpp
- g++ -c main.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- mysqlInterface.o : mysqlInterface.cpp
- g++ -c mysqlInterface.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- .PHONY:clean
- clean:
- rm -f main.o mysqlInterface.o test
执行结果:
make
g++ -c main.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
g++ -c mysqlInterface.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
./test
CMysqlInterface
connect success
程序运行成功
Makefile升级版:
- src = $(wildcard ./*cpp)
- obj = $(patsubst %.cpp , %.o , $(src))
- target = test
- CC = g++
- $(target) : $(obj)
- $(CC) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- %.o: %.cpp
- $(CC) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- .PHONY:clean
- clean:
- rm -f $(obj)$(target)
文件解释:
src = $(wildcard ./*cpp)
扩展通配符:搜索指定文件。
这句话代表的意思是再当前目录下搜索所有的 .cpp文件并赋值给变量 src。函数执行结束后,src的值就是 main.cp 和 mysqlInterface.cpp
obj = $(patsubst %.cpp , %.o , $(src))
patsubst,替换通配符,按照指定规则做替换。
此行代码的意思的是将src里的每个.cpp文件 都替换成 .o文件赋值给 obj变量。
这句话还可以替换成obj = $(src: %.c = %.o) //也是将src里的每个文件都是.c替换.o
Makefile再升级:
- src = $(wildcard ./*cpp)
- obj = $(patsubst %.cpp , %.o , $(src))
- target = test
- CC = g++
- $(target) : $(obj)
- $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- %o: %.cpp
- $(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
- .PHONY:clean
- clean:
- rm -f $(target) $(obj)
遇到的bug:
obj = $(patsubst %.cpp , %.o , $(src))
%.cpp,%.o不能有空格
如果有空格,那obj的值还是.cpp文件,不会转化为.o文件
%o: %.cpp
如果%.o少了,会报mysql.h找不到的错误
In file included from main.cpp:3:0:
mysqlInterface.h:2:18: fatal error:
mysql.h: 没有那个文件或目录
#include"mysql.h"
^
compilation terminated.
成功版本:
- CFLAGS := -g
- target := test
- INCLUDE = -I /usr/include/mysql
- lib = -lmysqlclient
- dirlib = -L /usr/lib/mysql/
- src = $(wildcard *.cpp)
- objs = $(patsubst %.cpp,%.o,$(src))
- all: $(target)
- %.o: %.cpp
- #g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@
- g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@
- $(target) : $(objs)
- g++ $(CFLAGS) $(objs) $(dirlib) $(lib) -o $(target) $(INCLUDE)
- .PHONY:clean
- clean:
- rm -f $(target) $(obj)
如果make的文件名是Makefile或makefile,直接执行make
如果是别的,比如Makefile1,就可以执行make -f Makefile1
执行结果:
exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ make -f Makefile1
#g++ -g -I /usr/include/mysql -lmysqlclient -L /usr/lib/mysql/ -c main.cpp -o main.o
g++ -g -I /usr/include/mysql -lmysqlclient -L /usr/lib/mysql/ -c main.cpp -o main.o
#g++ -g -I /usr/include/mysql -lmysqlclient -L /usr/lib/mysql/ -c mysqlInterface.cpp -o mysqlInterface.o
g++ -g -I /usr/include/mysql -lmysqlclient -L /usr/lib/mysql/ -c mysqlInterface.cpp -o mysqlInterface.o
g++ -g main.o mysqlInterface.o -L /usr/lib/mysql/ -lmysqlclient -o test -I /usr/include/mysql
程序运行结果;
exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ ./test
CMysqlInterface
connect success
linux环境下写C++操作mysql(二)的更多相关文章
- linux环境下写C++操作mysql(一)
/***************** connect.cpp g++ connect.cpp -o connect -I /usr/include/mysql/ -L /usr/lib/mysql/ ...
- DBA 应该要注意Linux 环境下的一些操作
DBA 对OS的依赖.一丁点儿也不亚于DB.对于Oracle DBA.尤为突出 DB和OS的感情也与日俱增.耦合度高的让人一度以为这两要劳燕双飞了 例如.Oracle里面. 而且.故障诊断以及 ...
- Linux 环境下安装 Nginx+php+mysql 开发环境
一直以来都没有养成记录学习的好习惯,我想从这么一天开始,把自己学习和工作中的经验和坑都记录下来.等到以后老的时候还有可以回忆的地方. 最近在学习linux,虽然已经玩linux很久了,但是没有怎么用心 ...
- oracle11G在linux环境下的卸载操作
1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus logSQL> connect / as sysdbaSQL> shutdown ...
- 阿里云服务器 :Linux环境下搭建Apache+php+mysql
以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apac ...
- 在linux环境下搭建JDK+JAVA+Mysql,并完成jforum的安装
参考链接: YUM安装MySQL和JDK和Tomcat:http://cmdschool.blog.51cto.com/2420395/1696206/ http://www.cnblogs.com/ ...
- Linux环境下没有权限操作文件或目录
linux下有超级用户(root)和普通用户,普通用户不能直接操作没有权限的目录,如果出现了没有权限的提示,可以尝试用su命令解决. 比如: #mkdir aaa 我要创建一个aaa的文件夹,没有操作 ...
- eclipse环境下,java操作MySQL的简单演示
首先先通过power shell 进入MySQL 查看现在数据库的状态(博主是win10系统) 右键开始,选择Windows powershell ,输入MySQL -u用户名 -p密码 选择数据库( ...
- linux环境下mongodb启动操作
pkill mongod 进入mongo shell :运行 db.shutdownServer() 1.进入mongo的shell : mongo --port 1008 2.进入bin目录下 m ...
随机推荐
- javaScript学习总结(二)——jQuery插件的开发
概要 jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定 ...
- python的学习之路(四)
#迭代器,取值只能用next方法,不能随意取值name = iter([11,22,33,44])print(name.__next__())print(name.__next__())print(n ...
- Tomcat解析XML和反射创建对象原理
Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...
- 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)
从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...
- SpringBoot 的启动banner生成网址
1.http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20 2.http://www. ...
- java中this总结(转载请注明出处)
1:this在构造方法中:this可以进行构造方法中的相互调用,this(参数): 2:this调用方法中,代表调用该方法的对象的地址,例如下面的代码比较 package thisTest; publ ...
- js 发送异步请求
js用XMLHttpRequest发送异步请求 发送GET请求 var xhr = new XMLHttpRequest(); xhr.open('GET',url);//url为请求地址 xhr.r ...
- 关于rpm包的安装卸载等
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM) ...
- zabbix mongodb 监控添加
在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...
- string 驻留机制
string 驻留机制 string s1 = "abc"; string s2 = "ab"; string s3 = s2 + "c" ...