Mit CPlusPlus auf MariaDB zugreifen - ein Beispiel

Aus bknowledgebase
Zur Navigation springen Zur Suche springen

Einleitung[Bearbeiten]

Hier eine kurze Beschreibung wie man am einfachsten mittels der Programmiersprache C++ und der IDE "Visual Studio" auf die MariaDB Datenbank zugreifen kann.

Diese Anleitung bezieht sich derzeit nur auf Windows Systeme. Ggf. werde ich noch eine Unix-Basierte Anleitung nachschießen.


Anleitung[Bearbeiten]

MariaDB Installieren[Bearbeiten]

Meistens wird man ja ohnehin die Datenbank selbst auf seinem Entwicklungssystem installieren. Wenn diese auf einem Fremdsystem liegt, kann man sich die nun im Folgenden beschriebenen Ordnerstrukturen mit den referenzierten Dateien auch von dem System kopieren auf dem die MariaDB läuft. (Nur vom Windows System)

Download der aktuellen MariaDB als ".msi-File" von:

https://downloads.mariadb.org/mariadb/

und installation mit sämtlichen Komponenten die wählbar sind. (Standardinstallation incl. HeidiSQL)

Testdatenbank erstellen[Bearbeiten]

Um letztenendes die Datenbankverbindung auch testen zu können benötigen wir eine Testdatenbank auf unserem MariaDB Server.

Wenn er lokal installiert ist, kann man beispielsweise das Programm "HeidiSQL" starten welches mit MariaDB mitgeliefert wird uns sich mit der lokalen DAtenbank verbinden:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Dann folgendes Wählen

Datei->Neuer Query Tab

Und diese SQL Query ausführen

 CREATE DATABASE IF NOT EXISTS test;
 USE test;
 CREATE TABLE names (id int, name varchar(50));
 INSERT INTO names (id,name) VALUES (0,"schlumpf");
 INSERT INTO names (id,name) VALUES (1,"Hinz");
 INSERT INTO names (id,name) VALUES (2,"Kunz");
 Select * from names;

Hier wird dann also eine Datenbank samt tabelle und inhalt angelegt die wir nutzen können. Und für die Überprüfung gleich auch nochmal die Daten ausgegeben die vorhanden sind.

Das Ergebnis sieht dann so aus:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Visual Studio C++ Projekt anlegen / Konfigurieren[Bearbeiten]

1. Visual Studio starten und neues Projekt anlegen


Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


2. Unbedingt folgendes Einstellen, da die Arbeit mit den zusätzlichen Bibliotheken sonst nicht funktioniert.

ReleaseX64.png


Ich kann nicht genau erklären, warum dies nur im "Release Scope" funktioniert. Vielleicht kann mich da noch jemand über den Diskussionsbereich hier erleuchten :).

Sicher aber ist, falls man diesen Schritt vergisst, muss man alle nun folgenden Konfigurationen nochmal machen, da diese immer nur für den Ausgewählten "Scope/Modue" gelten. (Also z.B. Debug + X86 oder Release + X64 usf.).

3.. Dann mit der rechten Maustaste das Projekt anklicken und "Eigenschaften" öffnen.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


Nun werden 3 Schritte benötigt um die mariadb/mysql Bibliothek verfügbar zu machen, die mit der MariaDB Installation auf einem Windows Rechner bereits lokal abgelegt sind.

Ich gehe hier davon aus, das die aktuelle MariaDB Version auf einem Win 10 Rechner installiert wurde und dann stimmen die Pfade. Ansonsten muss man ggf. leich abgewandelte Pfade nutzen die man aber leicht herausfindet.


Extra Includeverzeichnis hinzufügen[Bearbeiten]

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Meist wird es dieses Verzeichnis sein, kann aber natürlich abweichen.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


Extra "lib-verzeichnis"/Linker hinzufügen[Bearbeiten]

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden
Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


Bibliotheksfile auswählen/hinzufügen[Bearbeiten]

Hier muss das ".lib-File" also die Bibliotheksdatei selbst hinzugefügt werden. Meist reicht die die hier im Screenshot angegeben ist . Aber auch die kann im Namen abweichen oder es können zusätzliche Files notwendig sein, je nach Projekt.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


Und den Namen der ".dll" Datei eintragen.

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Bibliothek im Projekt verfügbar machen[Bearbeiten]

Nun findet zwar Visual Studio die Bibliothek, und damit die entsprechenden Methoden etc. die für das Kompilieren des Programms (hier der .exe) notwendig sind. Allerdings wird auch das Fertig-Kompilierte Programm am Ende diese Bibliothek benötigen um die aus dieser genutzten Funktionen verwenden zu können.

Dazu einfach die entsprechende .dll-Datei, hier libmariadb.dll in das Verzeichnis kopieren in dem sich letztendlich das kompilierte Programm, also unter Windows das ".exe-File" befindet.

Die Datei findet man im zuvor ausgewählten "lib-ordner" in diesem Fall 'C:\Program Files\MariaDB 10.3\lib"!

Zuvor muss natürlich das Programm mindestens schon einmal kompiliert worden sein, damit der Pfad zur ".exe-datei" überhaupt existiert also:

Bsp:

Kompilieren:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


Datei kopieren:

Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden


C++ Programm schreiben[Bearbeiten]

Und hier jetzt ein kleines C++ Programm welches unter Nutzung der neuen Bibliothek auf die Datenbank zugreift und die vorhandenen Zeilen auf der Konsole ausgibt.

#include "pch.h"
#include <iostream>
#include <mysql.h>
#include <string>

using namespace std;

int main(int argc, static char argv[]) {

	MYSQL     *conn;
	MYSQL_RES *res;
	MYSQL_ROW row;
	string sqlquery = "select * from names";


	conn = mysql_init(NULL);

	conn = mysql_real_connect(conn, "localhost", "root", "meinpasswort", "test", 3306, NULL, 0);

	if (conn) {
		printf("erfolgreich verbunden!");
	}

	//daten holen
	mysql_query(conn, sqlquery.c_str()); //query muss als c_str (c-string) übergeben werden
	res = mysql_store_result(conn); //resultset initialisieren

	cout << endl << "ID : " << "Name" << endl;
	while (row = mysql_fetch_row(res)) {
		cout << row[0] << " : " << row[1] << endl;
	}

	system("pause");
	return 0;
}

Den Code werde ich nicht im Detail erklären. Er ist recht simpel und wenn man mit C++ Programmiert und bereits soweit ist mit Datenbanken zu arbeiten sollte man diesen Code verstehen.

Das Programm kann nun gestartet werden und das Ergebnis sollte dann folgendermaßen aussehen:

Ergebnis.png

H@ppy H@cking