好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
mysql++ API 是一组访问MySQL的C++ API封装。主要目的在于把各种Query的操作和STL容器更好的结合。
google搜索mysql++找到其官网,从官网找到linux的源码,然后下载。
阅读源码的readme文件,查看 依赖那些库, 如何编译等。
MySQL++ is built on top of the MySQL C API library, so it needs the C API development files to build against.
yum install mysql-devel
写一个简单的文件连接查询的文件
yum install mysql 这个可以下载mysql的命令行连接工具,用这个可以测试数据库是否正常开启,是否能连接
其实就是如何远程访问的问题,给个权限就行。
error while loading shared libraries: libmysqlpp.so.3: cannot open shared object file: No such file or directory
1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib.so), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.
#include <mysql++.h>
using namespace std;
using namespace mysqlpp;
#define DATEBASE_NAME "test1"
#define DATEBASE_IP "192.168.1.19:3306"
#define DATEBASE_USERNAME "root"
#define DATEBASE_PWD "123456"
using namespace std;
using namespace mysqlpp;
int main() {
try {
Connection conn(false);
conn.connect(DATEBASE_NAME, DATEBASE_IP, DATEBASE_USERNAME, DATEBASE_PWD);
Query query = conn.query();
/* To insert stuff with escaping */
//INSERT INTO people (id, name) VALUES (5, 'ddd');
query << "INSERT INTO people " <<
"VALUES (7, 'eeeeeeee');";
query.execute();
/* That's it for INSERT */
/* Now SELECT */
query << "SELECT * FROM people LIMIT 10";
StoreQueryResult ares = query.store();
for (size_t i = 0; i < ares.num_rows(); i++)
cout << "Name: " << ares[i]["name"] << " - id: " << ares[i]["id"] << endl;
/* Let's get a count of something */
query << "SELECT COUNT(*) AS row_count FROM people";
StoreQueryResult bres = query.store();
cout << "Total rows: " << bres[0]["row_count"];
} catch (BadQuery er) { // handle any connection or
// query errors that may come up
cerr << "Error: " << er.what() << endl;
return -1;
} catch (const BadConversion& er) {
// Handle bad conversions
cerr << "Conversion error: " << er.what() << endl <<
"\tretrieved data size: " << er.retrieved <<
", actual size: " << er.actual_size << endl;
return -1;
} catch (const Exception& er) {
// Catch-all for any other MySQL++ exceptions
cerr << "Error: " << er.what() << endl;
return -1;
}
return (EXIT_SUCCESS);
}
TARGET = main
OBJ_PATH = objs
CC = gcc
CPP = g++ -std=c++11
INCLUDES += -I/usr/include/mysql -I/usr/local/mysql/include/mysql++
LIBS = /usr/lib64/libpthread.so /usr/lib64/librt.so /usr/local/lib/libmysqlpp.so.3
GFLAGS = -g
CFLAGS :=-Wall $(GFLAGS)
LINKFLAGS = -ldl
SRCDIR =.
C_SRCDIR = $(SRCDIR)
C_SOURCES = $(foreach d,$(C_SRCDIR),$(wildcard $(d)/*.c) )
C_OBJS = $(patsubst %.c, $(OBJ_PATH)/%.o, $(C_SOURCES))
CC_SRCDIR = $(SRCDIR)
CC_SOURCES = $(foreach d,$(CC_SRCDIR),$(wildcard $(d)/*.cc) )
CC_OBJS = $(patsubst %.cc, $(OBJ_PATH)/%.o, $(CC_SOURCES))
#CPP_SOURCES = $(wildcard *.cpp)
CPP_SRCDIR = $(SRCDIR)
CPP_SOURCES = $(foreach d,$(CPP_SRCDIR),$(wildcard $(d)/*.cpp) )
CPP_OBJS = $(patsubst %.cpp, $(OBJ_PATH)/%.o, $(CPP_SOURCES))
default:init compile
$(C_OBJS):$(OBJ_PATH)/%.o:%.c
$(CC) -c $(CFLAGS) $(INCLUDES) $< -o $@
$(CC_OBJS):$(OBJ_PATH)/%.o:%.cc
$(CPP) -c $(CFLAGS) $(INCLUDES) $< -o $@
$(CPP_OBJS):$(OBJ_PATH)/%.o:%.cpp
$(CPP) -c $(CFLAGS) $(INCLUDES) $< -o $@
init:
$(foreach d,$(SRCDIR), mkdir -p $(OBJ_PATH)/$(d);)
test:
@echo "C_SOURCES: $(C_SOURCES)"
@echo "CC_SOURCES: $(CC_SOURCES)"
@echo "CPP_SOURCES: $(CPP_SOURCES)"
@echo "C_OBJS: $(C_OBJS)"
@echo "CC_OBJS: $(CC_OBJS)"
@echo "CPP_OBJS: $(CPP_OBJS)"
compile:$(C_OBJS) $(CC_OBJS) $(CPP_OBJS)
$(CPP) $^ -o $(TARGET) $(LINKFLAGS) $(LIBS)
clean:
rm -rf $(OBJ_PATH)
rm -rf $(TARGET)