linux c++ mysql_【菜鸟玩Linux开发】在C++里操作MySQL

MySQL是一个的开源关系型数据库,对于服务端开发来说是一个优秀的选择。本篇内容将介绍如何在C++程序里操作MySQL数据库。

—————————————————————————————————————————————————————————————

阅读本篇内容之前你需要先了解以下知识:

C++编译链接基本原理

make相关知识

SQL基础知识和CRUD基础操作能力

—————————————————————————————————————————————————————————————

一. MySQL在CentOS下的安装

这部分内容相当简单,也有不少资料,请参考本篇文章。

二. MySQL CRUD基本操作和SQL语法

数据库的增删改查没什么好说的,请参考这里。

三. 在C++中使用MySQL

本节内容是我们的重点。学好了MySQL对CRUD的基础操作,那么如何跟C++代码结合起来呢?

MySQL其实提供了C实现的接口,而MySQL++则是一个C++实现的封装MySQL C接口的一个Wrapper,遵循了标准C++的规则,是个跨平台的开源工具。我们主要用MySQL++来开发C++程序。

1. 安装和配置

还是万年不变的新手主题——安装和配置

安装MySQL++之前需要先安装MySQL:

[root@localhost zhxilin]# yum install mysql-devel

[root@localhost zhxilin]#

紧接着下载MySQL++源码并解压,我们把压缩包解压到/usr/mysql++下:

[root@localhost zhxilin]# cd 下载

[root@localhost 下载]#wget http://www.tangentsoft.net/mysql++/releases/mysql++-3.2.2.tar.gz

[root@localhost 下载]# tar -zxvf mysql++-3.2.2.tar.gz -C /usr/[root@localhost usr]#mv mysql++-3.2.2 mysql++

进入mysql++目录下,开始编译,先执行./configure生成makefile文件,之后再make,编译出libmysqlpp.so库文件:

[root@localhost mysql++]#./configure --enable-thread-check

[root@localhost mysql++]#make

[root@localhost mysql++]# make install

install成功后会将.so文件拷贝到/usr/local/lib下,并把.h头文件拷贝到/usr/local/include下。

到这里MySQL++已经安装到本机了,然而如果直接在C++代码里引用如下头文件是无法编译通过的!

#include

原因是C++在编译时需要加载这个动态库,默认情况下,g++编译器只会使用/lib和/usr/lib这两个目录下的库文件。回头看一下make之前的./configure步骤,我们并没有指定--prefix=/some/path,所以库会默认安装到/usr/local目录下。既然libmysqlpp.so是在/usr/local/lib下,编译器当然就无法找到它的定义了。

那么编译器如何正确找到/usr/local/lib目录呢?

/etc/ld.so.conf文件记录了编译器编译时使用的动态库路径!那我们把/usr/local/lib路径加入到文件末尾就可以了!

次配置文件修改保存后,通过ldconfig程序(在usr/sbin/下),将/etc/ld.so.conf文件列举的路径下的库文件缓存到/etc/ld.so.cache以供开发使用:

[root@localhost mysql++]# ldconfig

建议多做一步,创建so的连接:

[root@localhost mysql++]# ln -s /usr/local/lib/libmysqlpp.so /usr/lib/libmysqlpp.so

到这里就配置完成了。

2. C++调用mysql++

我先用MySQL创建了一个test数据库,并添加了一张Student表,结构如下:

b0079f67e731dd1392ca97cf808eb6bc.png

并且插入了如下一些测试数据:

1993b468c19241bff46466346976daf7.png

在C++代码里,我们连接这个test数据库之后,进行一个查询,并将结果打印出来:

1 #include

2 #include

3

4 using namespacestd;5 int main()6 {7 const char* db = 0, *server = 0, *user = 0, *password = "";8 db = "test";9 server = "localhost";10 user = "zhxilin";11 password = "";12

13 mysqlpp::Connection conn(false);14 if(conn.connect(db, server, user, password)) {15 cout << "connect dbsucceed." <

20 setw(10) << "Sname" <<

21 setw(10) << "Sage" <<

22 setw(10) << "Sgender" <<

23 setw(10) << "SDepartment" <

25 mysqlpp::StoreQueryResult::const_iterator it;26 for (it = res.begin(); it != res.end(); ++it) {27 mysqlpp::Row row = *it;28 cout << setw(30) << row[0] << ' ' <<

29 setw(9) << row[1] << ' ' <<

30 setw(9) << row[2] << ' ' <<

31 setw(9) << row[3] << ' ' <<

32 setw(9) << row[4] << ' ' <<

33 endl;34 }35 }36 } else{37 cout << "connect dbfail." <

编译命令如下,编译时需要链接mysql和mysql++:

g++ -o main hello.cpp -lmysqlpp -I/usr/include/mysql -I/usr/local/include/mysql++

解释一下后面这段参数:

-Ldir(大写/eL/):编译时查找路径dir,这里分别是/usr/lib/mysql和/usr/local/lib,分别指mysql和mysql++所在目录(

-llib(小写/eL/):编译时链接的库lib,这里是mysqlpp,即libmysqlpp.o;(

-Idir(大写/ai/):编译时包含库头文件路径,这里分别是/usr/include/mysql和/usr/local/include/mysql++;(

写成makefile就是如下:

main : hello.cpp@g++ -o main hello.cpp -lmysqlpp -I/usr/include/mysql -I/usr/local/include/mysql++clean:

@rm main

执行结果如下:

cee1dbafdeb38cecde272ea8822aa2d2.png

数据库链接成功并成功查询了Student表里的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值