【菜鸟玩Linux开发】在C++⾥操作MySQL
MySQL是⼀个的开源关系型数据库,对于服务端开发来说是⼀个优秀的选择。本篇内容将介绍如何在C++程序⾥操作MySQL数据库。—————————————————————————————————————————————————————————————阅读本篇内容之前你需要先了解以下知识:
C++编译链接基本原理
make相关知识
SQL基础知识和CRUD基础操作能⼒—————————————————————————————————————————————————————————————
⼀. MySQL在CentOS下的安装
这部分内容相当简单,也有不少资料,请参考。
⼆. MySQL CRUD基本操作和SQL语法
数据库的增删改查没什么好说的,请参考。
三. 在C++中使⽤MySQL
本节内容是我们的重点。学好了MySQL对CRUD的基础操作,那么如何跟C++代码结合起来呢?
MySQL其实提供了C实现的接⼝,⽽则是⼀个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 www.tangentsoft/mysql++/releases/mysql++-3.2.
[root@localhost 下载]# tar -zxvf mysql++-3.2. -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 <mysql++.h>
原因是C++在编译时需要加载这个动态库,默认情况下,g++编译器只会使⽤/lib和/usr/lib这两个⽬录下的库⽂件。回头看⼀下make之前的./configure步骤,我们并没有指定--prefix=/some/path,所以库
会默认安装到/usr/local⽬录下。既然libmysqlpp.so是在/usr/local/lib下,编译器当然就⽆法到它的定义了。
那么编译器如何正确到/usr/local/lib⽬录呢?
/etc/f⽂件记录了编译器编译时使⽤的动态库路径!那我们把/usr/local/lib路径加⼊到⽂件末尾就可以了!
次配置⽂件修改保存后,通过ldconfig程序(在usr/sbin/下),将/etc/f⽂件列举的路径下的库⽂件缓存到/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表,结构如下:
并且插⼊了如下⼀些测试数据:
在C++代码⾥,我们连接这个test数据库之后,进⾏⼀个查询,并将结果打印出来:
1 #include <mysql++.h>
2 #include <iostream>
3
4using namespace std;
5int main()
6 {
7const char* db = 0, *server = 0, *user = 0, *password = "";
8 db = "test";
9 server = "localhost";
10 user = "zhxilin";
11 password = "";
xml文件用什么软件写12
13 mysqlpp::Connection conn(false);
14if (t(db, server, user, password)) {
15 cout << "connect db succeed. " << endl;
16 mysqlpp::Query query = conn.query("SELECT * FROM Student");
17if (mysqlpp::StoreQueryResult res = query.store()) {
18 cout.setf(ios::left);
19 cout << setw(31) << "Sid" <<
20 setw(10) << "Sname" <<mysql安装教程菜鸟课程
21 setw(10) << "Sage" <<
22 setw(10) << "Sgender" <<
23 setw(10) << "SDepartment" << endl;
24
25 mysqlpp::StoreQueryResult::const_iterator it;
26for (it = res.begin(); it != d(); ++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 {intellijidea安装步骤
37 cout << "connect db fail. " << endl;
38 }
39return0;
40 }
编译命令如下,编译时需要链接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++所在⽬录(<---修改:这⾥不需要写了,因为f已经加上/usr/local/lib,/usr/lib和/usr/local/lib都能默认到)
-llib(⼩写/eL/):编译时链接的库lib,这⾥是mysqlpp,即libmysqlpp.o;(<---修改:编译器在查的时候有隐式规则,即在指定的名字前加lib,后加.so来查对应的库⽂件)
大一三角函数必背公式-Idir(⼤写/ai/):编译时包含库头⽂件路径,这⾥分别是/usr/include/mysql和/usr/local/include/mysql++;(<---修改:这⾥还需要是因为.h⽂件分别放在include⽬录下的mysql⽂件夹和mysql++⽂件夹下,如果.h直接在include⽬录中就不必写了)
写成makefile就是如下:
main : hello.cpp
@g++ -o main hello.cpp -lmysqlpp -I/usr/include/mysql -I/usr/local/include/mysql++
clean:
@rm main
执⾏结果如下:
极限空间在线观看数据库链接成功并成功查询了Student表⾥的数据。
MySQL++的更多⽤法,请参考官⽅⽂档
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论