• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

linux环境下写C++操作mysql(二)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

main.cpp

#include<stdio.h>
#include<stdlib.h>
#include"mysqlInterface.h"


int main()
{
    CMysqlInterface mysqlObj;
    mysqlObj.connect();
    return 0;
}

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 = -1;
    mysql_real_connect(mysqlPtr,"localhost","root","csql","child",0,NULL,0);
    if(!mysqlPtr)
    {
        printf("connect failed\n");
    }
    else
    {
        printf("connect success\n");
        iRet = 0;
    }
    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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
报错:com.mchange.v2.c3p0.ComboPooledDataSource发布时间:2022-07-14
下一篇:
C#错误异常列表发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap