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

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 [email protected] -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 [email protected] -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 [email protected]
        g++ $(CFLAGS)   $(INCLUDE) $(lib) $(dirlib) -c $< -o [email protected] 

$(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

执行结果:

[email protected]:~/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

程序运行结果;

[email protected]:~/wangqinghe/MySql/20190621/01/01$ ./test
CMysqlInterface
connect success

原文地址:https://www.cnblogs.com/wanghao-boke/p/11067013.html

时间: 2024-10-08 15:28:56

linux环境下写C++操作mysql(二)的相关文章

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

/***************** connect.cpp g++ connect.cpp -o connect -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient ****************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include"mysql.h" class CMysqlInterface

Linux环境下安装单实例MySQL 5.7

一.安装环境 1.操作系统版本:CentOS 7.5 2.MySQL版本:5.7.22(社区版) 3.MySQL安装包:mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 二.安装步骤 1.检查系统中是否安装了其他版本的MySQL(root用户) 首先检查系统中是否安装了其他版本的MySQL,使用以下命令进行检查: yum list installed | grep mysql yum list installed | grep mariadb MariaDB数

测试环境搭建和部署(在Linux环境下搭建jdk+Tomcat+mysql环境和项目包的部署)

1.Linux环境(我搭建的是64位centos版本的linux系统) 1.下载并安装一个VMware Workstation虚拟机,是搭建Linux系统的平台.      2.下载一个centos安装包. 3.打开VMware Workstation,新建一个虚拟机,根据提示安装步骤,导入安装包,设置用户名和密码(此处设置的是普通账户,但密码和根账号root共用),其他的步骤全部点击下一步到最后,然后 静静等安装成功. 4.安装完成后,输入密码进入图形化界面,点击右键选择Open in Ter

oracle11G在linux环境下的卸载操作

1.使用SQL*PLUS停止数据库[[email protected] oracle]$ sqlplus logSQL> connect / as sysdbaSQL> shutdown [immediate]SQL> exit 2.停止Listener[[email protected] oracle]$ lsnrctl stop 3.停止HTTP服务[[email protected] /root]# service httpd stop 4.用su或者重新登录到root(如想重新安

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

以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apache 我选的操作系统是Linux的Ubuntu系统,使用的工具是xshell,xftp 1.切换管理员身份           //这一步我没用,我进入的时候就是root权限 在ubuntu中需要用root身份进行操作,所以用下面的命令确保以root身份登录: sudo su 2.开始安装mysql

linux环境下 安装apache、mysql和php环境

一.首先判断是否有系统自带的Apache和mysql rpm -qa|grep httpd     把apache相关的包都列出来 rpm –e httpd-manual-2.2.3-11.el5_2.centos.4     卸载apache.如果实在有卸载不掉的包,可以加—nodeps这个参数来卸载.[[email protected] ~]# rpm -e httpd-manual-2.2.3-11.el5_2.centos.4 --nodeps 其他相关的卸载同理 二.安装apache

多线程编程之Linux环境下的多线程(二)

上一篇文章中主要讲解了Linux环境下多线程的基本概念和特性,本文将说明Linux环境下多线程的同步方式. 在<UNIX环境高级编程>第二版的“第11章 线程”中,提到了三种基本的同步机制:互斥.读写锁.条件变量.下面分别针对这三种机制进行说明: 一.线程互斥 互斥意味着具有“排它性”,即两个线程不能同时进入被互斥保护的代码.Linux下可以通过pthread_mutex_t 定义互斥体机制完成多线程的互斥操作,该机制的作用是对某个需要互斥的部分,在进入时先得到互斥体,如果没有得到互斥体,表明

linux环境下搭建MySQL数据库的双击热备

准备服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的搭配组合是主(Master)服务器的Mysql版本和从(Slave)服务器版本相同或者更低,主服务器的版本肯定不能高于从服务器版本.本次我用于测试的两台服务器版本都是Mysql-5.5.17. Mysql 建立主-从服务器双机热备配置步骤 2.1环境描述A服务器(主服务器Master):59.151.15.36B服务器(从服务器Slave):218.206.70.146主从服务器的Mysql版本皆为5

Linux环境下实现对文件读写操作

---- 今天分享一下在linux系统在实现对文件读写一些基本的操作,在这之前我们要掌握一些基本的技能在Linux环境下.比如查看命令和一个函数的具体用法,就是相当于查手册,在Linux下有一个man手册非常有用:man查询手册man 1 +命令 这里的1表示为查询的是Linux命令man 2 xxx 这里的2表示为查询的是linux apiman 3 xxx 这里的3表示为查询的是c库函数在了解了这个后我们就可以开始来实现标题说的操作了.一.在linux环境下常用文件接口函数:open.clo