SOCI – MySQL C++ Datenbank Abstraktion

Für ein neues Projekt habe ich mir SOCI, ein MySQL C++ Datenbank Abstraktionslayer, näher angesehen und in einem  kleinen Beispielprojekt zum Laufen gebracht. Ich zeige euch in diesem Tutorial wie ihr diese Bibliothek in einem einfachen C++ Programm verwendet um eine externe MySQL Datenbank anzusprechen.

SOCI C++ MySQL Datenbank Abstraktion

SOCI – MySQL C++ Datenbank Abstraktion

Alle Informationen für dieses Tutorial habe ich von der Dokumentation der Projektseite von SOCI entnommen. Diese ist mehr oder weniger ausreichend, ich musste aber für mein erstes Programm einige Dinge recherchieren beziehungsweise probieren. Ich hoffe mit diesem Tutorial kürze ich diesen Lernprozess für euch deutlich ab.

Installation

Ich habe dieses Projekt auf einem Ubuntu 16.04 System umgesetzt. Damit man die Bibliothek überhaupt erstellen kann wird zwingend cmake benötigt, deshalb habe ich es im ersten Schritt über den Paketmanager installiert:

Nun kann man sich den Source Code des Projekts von GitHub über Git clonen:

SOCI MySQL C++ Datenbank Abstraktion

Es wird der Ordner soci erstellt. In diesem Ordner habe ich mir einen build Ordner erstellt in den ich das Programm dank cmake erstelle und auch gleich im Sytem installiere:

ich habe folgende Fehlermeldung bekommen:

Bei mir benötigte make install root Rechte, weil er versucht die erstellte Bibliothek in einem Systemordner abzulegen. Aus diesem Grund habe ich das letzte Kommando mit

ausgeführt.

Verwendung

Um SOCI zu testen habe ich mir auf meinem Webspace eine neue Datenbank angelegt und dort zwei Tabellen country und player. Country enthält dabei eine Liste aller Nationen der Welt, player ist leer und soll Spielernamen enthalten. Im Beispielprogramm werde ich zwei abfragen machen. Zum einen ein Select über die country Tabelle und zum anderen ein Insert in die player Tabelle. Damit sollen die üblichen Statements für ein Programm getestet werden.

Der vollständige Source Code meines Testprogramms:

In diesem Testprogramm wird zuerst eine session mit der Verbindung zur Datenbank angelegt. DATENBANK, BENUTZER, PASSWORT und IPADRESSE sind klarerweise mit dein eigenen Logindaten zu ändern. Das erste Statement gibt die Anzahl (count) der Zeilen von der country Tabelle zurück und in der Kommandozeile aus. Danach werden alle Ländernamen der selben Tabelle in ein Resultset geladen und in eine TXT Datei geschrieben. Zuletzt wird dann noch eine neue Zeile in die players Tabelle mit einem Insert Statement geschrieben.

Als IDE verwende ich Code::Blocks, ich habe beim Projekt folgende Einstellungen verwendet:

Die Einstellungen für das Linken:

Project build options linker settings

Der Projektpfad:

Project build options search directories

Probleme

Bei mir wurde beim ersten Mal compilieren, nachdem die libs und include Pfade gesetzt wurden, folgende Meldung ausgegeben
../../soci/include/soci/mysql/soci-mysql.h|31|fatal error: mysql.h: Datei oder Verzeichnis nicht gefunden|
Das ganze in der Zeile 31 mit folgendem Inhalt
#include // MySQL Client

zusätzlich musste ich noch /usr/include/mysql als Search Directory hinzufügen.

Fazit

SOCI ist eine C++ Datenbank Abstraktion für MySQL, PostgreSQL, Oracle, usw. Ich habe das mit einem einfachen C++ Programm und einer üblichen MySQL Datenbank getestet die man bei einem Webspace standardmäßig dabei hat. Nach anfänglichen Schwierigkeiten die Bibliothek zu erstellen und dann im Projekt korrekt zu includen beziehungsweise zu verlinken lief alles problemlos. Die Abfragen laufen schnell und sind im Vergleich zu einer reinen PHP Implementierung deutlich schneller.

Welche C++ habt ihr schon getestet? Welche Erfahrungen habt ihr mit SOCI gemacht?

(Visited 189 times, 1 visits today)

Das könnte auch interessant sein...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.