[20:00] Lottoziehung in 02d 00:00h
[00:00] Songs gespielt gestern: 0
[00:01] Alles Gute an Beethoven
[20:00] Lottoziehung in 01d 00:00h
[00:00] Songs gespielt gestern: 0
[00:01] Alles Gute an corian
Trackmania Minecraft Andere Spiele
Antwort
Themen-Optionen
#1
Alt 07.07.07, 16:51:58
[C++] Using mysql library
blue
Benutzerbild von blue
Big Daddy
Registriert seit: 02.02.03
Alter: 37
Geschlecht: ♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3

Spenden-Award Spenden-Award Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

blue eine Nachricht über ICQ schicken
Hier eine Klasse für C++ für dem Umgang mit mysql mit der mysql library:

Code:
/* 	SQL Klasse zum Zugriff auf mysql Datenbanken mit C++.
 *  
  */

#ifndef SQL_H
#define SQL_H

#define MAX_IRC_TEXT_LENGHT 512
#define STEP				8

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

using namespace std;

class sql {
private:
	char *pHost;
	int pHost_sz;
	
	char *pUser;
	int pUser_sz;
	
	char *pPw;
	int pPw_sz;
	
	char *pDb;
	int pDb_sz;
	
	bool connected;
	
	void sql_init();
	void sql_error();
	bool sql_connect();
	void sql_disconnect();
	
public:
	// Das MYSQL Objekt aus der mysql.h
	MYSQL *my;
	
	// Konstruktor / Destruktor
	sql(char *_host, char *_user, char *_pw, char *_db);
	~sql();

	// Methoden
	
	// debugging Methode
	void DEBUG();
	
	// Verbindung aufbauen
	
	// Query ausführen
	bool sql_query(string query);
};

// Konstruktor
sql::sql(char *_host, char *_user, char *_pw, char *_db) {
	this->pHost = NULL;
	this->pHost_sz = 0;
	
	this->pUser = NULL;
	this->pUser_sz = 0;
	
	this->pPw = NULL;
	this->pPw_sz = 0;
	
	this->pDb = NULL;
	this->pDb_sz = 0;
	
	for(int i=0; i<=strlen(_host); i++) {
		if(i >= pHost_sz) {
			char *c = new char[this->pHost_sz+STEP];
			
			for(int j=0; j<pHost_sz; j++) {
				c[j] = this->pHost[j];	
			}	
			
			if(this->pHost == NULL)
				delete[] this->pHost;
			
			this->pHost = c;
			this->pHost_sz += STEP;	
			
		}
		this->pHost[i] = _host[i];
	}
	
	
	for(int i=0; i<=strlen(_user); i++) {
		if(i >= pUser_sz) {
			char *c = new char[this->pUser_sz+STEP];
			
			for(int j=0; j<pUser_sz; j++) {
				c[j] = this->pUser[j];	
			}	
			
			if(this->pUser == NULL)
				delete[] this->pUser;
			
			this->pUser = c;
			this->pUser_sz += STEP;	
		}
		this->pUser[i] = _user[i];
	}
	
	
	for(int i=0; i<=strlen(_pw); i++) {
		if(i >= pPw_sz) {
			char *c = new char[this->pPw_sz+STEP];
			
			for(int j=0; j<pPw_sz; j++) {
				c[j] = this->pPw[j];	
			}	
			
			if(this->pPw == NULL)
				delete[] this->pPw;
			
			this->pPw = c;
			this->pPw_sz += STEP;	
		}
		this->pPw[i] = _pw[i];
	}
	
	
	for(int i=0; i<=strlen(_db); i++) {
		if(i >= pDb_sz) {
			char *c = new char[this->pDb_sz+STEP];
			
			for(int j=0; j<pDb_sz; j++) {
				c[j] = this->pDb[j];	
			}	
			
			if(this->pDb == NULL)
				delete[] this->pDb;
			
			this->pDb = c;
			this->pDb_sz += STEP;	
		}
		this->pDb[i] = _db[i];
	}
	
	// Nachdem die Parameter gesetzt wurden, wird das Objekt initialisiert
	this->sql_init();
}

sql::~sql() {
	if(this->pHost != NULL) {
		delete[] pHost;
	}
	if(this->pUser != NULL) {
		delete[] pUser;
	}
	if(this->pPw != NULL) {
		delete[] pPw;
	}
	if(this->pDb != NULL) {
		delete[] pDb;
	}
}

void sql::sql_error() {
	// Selbsterklärend
	cerr << "Errorcode: " << mysql_errno(my) << "\n" << mysql_error(my);
	//exit(EXIT_FAILURE);
}

void sql::DEBUG() {
	cout << this->pHost << endl;
	cout << this->pUser << endl;
	cout << this->pPw << endl;
	cout << this->pDb << endl;
}

void sql::sql_init() {
	this->connected = false;

	if((this->my = mysql_init(NULL)) == NULL) {
		cerr << "Fehler beim initialisieren.";
		exit(EXIT_FAILURE);
	}
}

void sql::sql_disconnect() {
	if(this->connected) {
		mysql_close(my);
		this->connected = false;	
	}
}

bool sql::sql_connect() {
	// Zur Datenbank verbinden:
	if(this->connected == false) {
		if(mysql_real_connect(
				my,		/* *MYSQL Handler	*/
				this->pHost,	/* Host			*/
				this->pUser,	/* User			*/
				this->pPw,	/* Passwort		*/
				this->pDb,	/* Datenbank	*/
				0,			/* Port			*/
				NULL,		/* Socket		*/
				0)			/* Flags 		*/ == NULL) {
			// Bei einem Fehler die error Methode ausführen
			this->sql_error();
			return false;
		}
		else {
			this->connected = true;
			return true;
		}	
	}

}

bool sql::sql_query(string query) {
	
	if(this->connected == false) {
		if(this->sql_connect() == false) {
			return false;
		}
	}
	
	// in dynamic char casten
	char *sql_char = NULL;
	int sql_char_sz = 0;
	for(int i=0; i<=query.size(); i++) {
		// Ist das Query länger als der sql_char?
		if(i >= sql_char_sz) {
			// Joa, ist er, also ein neues - größeres - Char erzeugen
			char *c = new char[sql_char_sz+STEP];
			// Daten kopieren
			for(int j=0; j<sql_char_sz; j++)
				c[j] = sql_char[j];
			// Altes Char löschen
			if(sql_char != NULL)
				delete[] sql_char;
			// c zuweisen
			sql_char = c;
			sql_char_sz += STEP;
		}
		// Dateneintragen
		sql_char[i] = query[i];
	}
	
	// Query ausführen
	if(mysql_real_query(this->my, sql_char, (unsigned) (long) strlen(sql_char)))
		this->sql_error();
		
	if(this->connected == true) {
		this->sql_disconnect();	
	}

	return true;
}

#endif

Die Klasse auf der main.cpp includen und initiieren mit
sql sc("HOST","USER","PASSWORD","DATENBANK");.

Anschließend zum Server verbinden mit:
sc.connect()

und schließlich ein Query ausführen mti:
string sql_query_string = "INSERT INTO table (PARAMS) VALUES (PARAMS)";
sc.sql_query(sql_query_stri
ng);


Um sie nutzen zu können, muss man unter Windows die mysql++ API installieren. und die include- und lib Pfade hinzufügen. Außerdem ist es nötig die windows.h, noch bevor man die mysql.h included, einzufügen!

Unter Linux installiert man sich einfach das Paket mysql und teilt dem Compiler (ich habe g++ genutzt) mit die Verzeichnisse /usr/include/mysql/ und /usr/lib/mysql/ nach den Includes und Librarys zu durchsuchen.

g++ -c -I/usr/include/mysql main.cpp
g++ -o main main.o -L/usr/lib/mysql -lmysqlclient -lz


Gruß,
Blue


/€1:
Update: Dynamische Speicherreseverierung der Variablen Host, User, Passwort und Datenbank eingefügt und weitere Änderungen vorgenommen.

Geändert von blue (08.07.07 um 18:51:48 Uhr)
Antwort
Lesezeichen
Facebook

Direkt antworten
Nachricht:
Benutzername: 
Email (nicht ausfüllen!): Sicherheitsgrafik
Optionen

« Vorheriges Thema | Nächstes Thema »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Teamspeak 3

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:38:12 Uhr.


Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template-Modifikationen durch TMS
Die Betreiber haften nicht für die Inhalte der User. Die Beiträge spiegeln ausschließlich persönliche Meinungen wider, und nicht die der Seitenbetreiber.