main.cpp

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include"mysqlInterface.h"
  4.  
  5. int main()
  6. {
  7. CMysqlInterface mysqlObj;
  8. mysqlObj.connect();
  9. return ;
  10. }

mysqlInterface.h

  1. class CMysqlInterface
  2. {
  3. public:
  4. CMysqlInterface();
  5. ~CMysqlInterface();
  6. int connect();
  7. private:
  8. MYSQL* mysqlPtr;
  9. };

mysqlInterface.cpp

  1. #include"mysqlInterface.h"
  2.  
  3. CMysqlInterface::CMysqlInterface()
  4. {
  5. printf("CMysqlInterface\n");
  6. mysqlPtr = NULL;
  7. mysqlPtr = mysql_init(NULL);
  8. if(!mysqlPtr)
  9. {
  10. printf("mysql_init failed\n");
  11. }
  12. }
  13.  
  14. CMysqlInterface::~CMysqlInterface()
  15. {
  16. mysql_close(mysqlPtr);
  17. mysqlPtr = NULL;
  18. }
  19.  
  20. int CMysqlInterface::connect()
  21. {
  22. int iRet = -;
  23. mysql_real_connect(mysqlPtr,"localhost","root","csql","child",,NULL,);
  24. if(!mysqlPtr)
  25. {
  26. printf("connect failed\n");
  27. }
  28. else
  29. {
  30. printf("connect success\n");
  31. iRet = ;
  32. }
  33. return iRet;
  34. }

Makefile:

  1. Makefile文件
  2. test : main.o mysqlInterface.o
  3. g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  4.  
  5. main.o:main.cpp
  6. g++ -c main.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  7. mysqlInterface.o : mysqlInterface.cpp
  8. g++ -c mysqlInterface.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  9.  
  10. .PHONY:clean
  11. clean:
  12. 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升级版:

  1. src = $(wildcard ./*cpp)
  2. obj = $(patsubst %.cpp , %.o , $(src))
  3. target = test
  4. CC = g++
  5.  
  6. $(target) : $(obj)
  7. $(CC) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  8.  
  9. %.o: %.cpp
  10. $(CC) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  11.  
  12. .PHONY:clean
  13. clean:
  14. rm -f $(obj)$(target)
  1.  

文件解释:

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再升级:

  1. src = $(wildcard ./*cpp)
  2. obj = $(patsubst %.cpp , %.o , $(src))
  3.  
  4. target = test
  5. CC = g++
  6.  
  7. $(target) : $(obj)
  8. $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  9.  
  10. %o: %.cpp
  11. $(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
  12.  
  13. .PHONY:clean
  14. clean:
  15. 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.

成功版本:

  1. CFLAGS := -g
  2. target := test
  3. INCLUDE = -I /usr/include/mysql
  4. lib = -lmysqlclient
  5. dirlib = -L /usr/lib/mysql/
  6.  
  7. src = $(wildcard *.cpp)
  8. objs = $(patsubst %.cpp,%.o,$(src))
  9.  
  10. all: $(target)
  11.  
  12. %.o: %.cpp
  13. #g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@
  14. g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@
  15.  
  16. $(target) : $(objs)
  17. g++ $(CFLAGS) $(objs) $(dirlib) $(lib) -o $(target) $(INCLUDE)
  18.  
  19. .PHONY:clean
  20. clean:
  21. 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(二)的更多相关文章

  1. linux环境下写C++操作mysql(一)

    /***************** connect.cpp g++ connect.cpp -o connect -I /usr/include/mysql/ -L /usr/lib/mysql/ ...

  2. DBA 应该要注意Linux 环境下的一些操作

    DBA 对OS的依赖.一丁点儿也不亚于DB.对于Oracle DBA.尤为突出     DB和OS的感情也与日俱增.耦合度高的让人一度以为这两要劳燕双飞了 例如.Oracle里面. 而且.故障诊断以及 ...

  3. Linux 环境下安装 Nginx+php+mysql 开发环境

    一直以来都没有养成记录学习的好习惯,我想从这么一天开始,把自己学习和工作中的经验和坑都记录下来.等到以后老的时候还有可以回忆的地方. 最近在学习linux,虽然已经玩linux很久了,但是没有怎么用心 ...

  4. oracle11G在linux环境下的卸载操作

    1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus logSQL> connect / as sysdbaSQL> shutdown ...

  5. 阿里云服务器 :Linux环境下搭建Apache+php+mysql

    以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apac ...

  6. 在linux环境下搭建JDK+JAVA+Mysql,并完成jforum的安装

    参考链接: YUM安装MySQL和JDK和Tomcat:http://cmdschool.blog.51cto.com/2420395/1696206/ http://www.cnblogs.com/ ...

  7. Linux环境下没有权限操作文件或目录

    linux下有超级用户(root)和普通用户,普通用户不能直接操作没有权限的目录,如果出现了没有权限的提示,可以尝试用su命令解决. 比如: #mkdir aaa 我要创建一个aaa的文件夹,没有操作 ...

  8. eclipse环境下,java操作MySQL的简单演示

    首先先通过power shell 进入MySQL 查看现在数据库的状态(博主是win10系统) 右键开始,选择Windows powershell ,输入MySQL -u用户名 -p密码 选择数据库( ...

  9. linux环境下mongodb启动操作

    pkill mongod 进入mongo shell :运行 db.shutdownServer() 1.进入mongo的shell  : mongo --port 1008 2.进入bin目录下 m ...

随机推荐

  1. javaScript学习总结(二)——jQuery插件的开发

    概要 jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定 ...

  2. python的学习之路(四)

    #迭代器,取值只能用next方法,不能随意取值name = iter([11,22,33,44])print(name.__next__())print(name.__next__())print(n ...

  3. Tomcat解析XML和反射创建对象原理

    Tomcat解析XML和反射创建对象原理 import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Me ...

  4. 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)

    从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...

  5. SpringBoot 的启动banner生成网址

    1.http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20 2.http://www. ...

  6. java中this总结(转载请注明出处)

    1:this在构造方法中:this可以进行构造方法中的相互调用,this(参数): 2:this调用方法中,代表调用该方法的对象的地址,例如下面的代码比较 package thisTest; publ ...

  7. js 发送异步请求

    js用XMLHttpRequest发送异步请求 发送GET请求 var xhr = new XMLHttpRequest(); xhr.open('GET',url);//url为请求地址 xhr.r ...

  8. 关于rpm包的安装卸载等

    在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM) ...

  9. zabbix mongodb 监控添加

    在zabbix 上添加mongodb的监控 由于使用的是zabbix 3.0 所有在模板里面又自己的模板名字叫:Template MongoDB 所以 客户端的配置如下 到配置文件目录 /usr/lo ...

  10. string 驻留机制

    string 驻留机制   string s1 = "abc"; string s2 = "ab"; string s3 = s2 + "c" ...