Linux下C++接続操作MySQLデータベース環境構築


[align=center][size=large][b]LinuxでのC++接続操作MySQLデータベース環境構築[/b][size][align]
[align=left][b]日付バージョン作者修正内容備考[/b][align]
[align=left][b]2017年4月8日V 1.0劉勝軍文書初建無[/b][align]
[size=medium][b][color=blue]一、引用[color][b][size]
[b]1.1作成目的[/b]
Linux下C++接続操作MySQLデータベース環境構築
[b]1.2用語[/b]
[color=green]gcc/gcc-c++:[/color]
  The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages (libstdc++,...). GCC was originally written as the compiler for the GNU operating system. The GNU system was developed to be 100% free software, free in the sense that it respects the user's freedom.
[color=green]boost/boost-devel:[/color]
  Boost provides free peer-reviewed portable C++ source libraries.
[color=green]mysql-connector-c++:[/color]
  All distributions of Connector/C++ contain a README file, which contains platform-specific notes. At the end of the README file contained in the binary distribution you will find the settings used to build the binaries. If you experience build-related issues on a platform, it may help to check the settings used on the platform to build the binary.
[b]1.3準備作業[/b]
1台にCentOS 7がインストール.X OSの機械は、インターネットに接続したり、オフラインインストールパッケージを用意したりすることができます.
[b]1.4注意事項[/b]
yumソースを使用してインストールする場合は、yumソースを正しく構成する必要があります.
[size=medium][b][color=blue]二、環境依存構築[/color][b][size]
[b]2.1 gcc-c++[/b]をインストールする
方法1:yumソースの使用
[code="bash"]
# yum install -y gcc-c++
[/code]
方法2:ローカルrpmを使用する

rpm -ivh libgcc-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh glibc-common-2.17-157.el7_3.1.x86_64.rpm --force --nodeps
rpm -ivh glibc-2.17-157.el7_3.1.x86_64.rpm --force --nodeps
rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm --force --nodeps
rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm --force --nodeps
rpm -ivh libstdc++-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh libstdc++-devel-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh cpp-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh libgomp-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh kernel-headers-3.10.0-514.10.2.el7.x86_64.rpm --force --nodeps
rpm -ivh glibc-headers-2.17-157.el7_3.1.x86_64.rpm --force --nodeps
rpm -ivh glibc-devel-2.17-157.el7_3.1.x86_64.rpm --force --nodeps
rpm -ivh gcc-4.8.5-11.el7.x86_64.rpm --force --nodeps
rpm -ivh gcc-c++-4.8.5-11.el7.x86_64.rpm --force --nodeps

[b]2.2 boost-develをインストールする[/b]
方法1:yumソースの使用
[code="bash"]
# yum install -y boost-devel
[/code]
方法2:ローカルrpmを使用する

rpm -ivh boost-system-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-chrono-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-filesystem-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-thread-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh libicu-50.1.2-15.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-regex-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-date-time-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-wave-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-graph-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-locale-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-timer-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-random-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-program-options-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-context-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-atomic-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-python-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-iostreams-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-serialization-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-math-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-test-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-signals-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-1.53.0-26.el7.x86_64.rpm --force --nodeps
rpm -ivh boost-devel-1.53.0-26.el7.x86_64.rpm --force --nodeps

[b]2.3 mysql-connector-c+[/b]をインストールする
ダウンロード先:
https://dev.mysql.com/downloads/connector/cpp/
Connector/C++ 1.1.8
Looking for previous GA versions?
Select Operating System:
Linux - Generic
Select OS Version:
Linux - Generic (glibc 2.5) (x86, 64-bit)
インストール:

rpm -ivh mysql-connector-c++-1.1.8-linux-glibc2.5-x86-64bit.rpm

[size=medium][b][color=blue]三、テスト[/color][b][size]
[b]3.1テストファイルの作成[/b]
[code="bash"]
# cat Test.cpp
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main() {
try {
std::cout<<「入口開始」<sql::mysql::MySQL_Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
driver = sql::mysql::get_mysql_driver_instance();
std::cout<<「データベース接続」<con = driver->connect("tcp://127.0.0.1:3306", "test", "test");
stmt = con->createStatement();
stmt->execute("USE test");//使用するデータベースの選択
std::cout<<「クエリー結果の取得」<sql::ResultSet* result = stmt->executeQuery("select now() as time");
std::cout<<「クエリー結果の出力」<if (result) {
while (result->next()) {
cout << result->getString(1) << std::endl;
}
}
} catch (sql::SQLException &e) {
return -1;
}
}
[/code]
[b]3.2テストファイルのコンパイル[/b]
[code="bash"]
# g++ -o test Test.cpp
[/code]
[b]3.3テスト[/b]
[code="bash"]
# ./test
エントランス開始
データベースの接続
クエリー結果の取得
クエリー結果の出力
2017-04-08 12:38:20
[/code]
[size=medium][b][color=blue]四、問題解析[/color][b][size]
[b]4.1問題一:[/b]undefined reference to`sql::mysql::get_driver_instance()'
[code="bash"]
# g++ -o test Test.cpp
/tmp/cc2gvcAt.o: In function `sql::mysql::get_mysql_driver_instance()':
Test.cpp:(.text+0x5): undefined reference to `sql::mysql::get_driver_instance()'
collect2: error: ld returned 1 exit status
[/code]
解決方法:
[code="bash"]
# g++ -o test Test.cpp -lmysqlcppconn
# ./test
エントランス開始
データベースの接続
クエリー結果の取得
クエリー結果の出力
2017-04-08 12:45:14
#
[/code]