Big Daddy
Registriert seit: 02.02.03
Style: Zahls Bastelecke
Alter: 37
Geschlecht:
♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3
☆
☆
☆
☆
☆
★
★
★
Hier eine Klasse für C++ für dem Umgang mit mysql mit der mysql library:
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_string);
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.
Gruß,
Blue
/€1:
Update: Dynamische Speicherreseverierung der Variablen Host, User, Passwort und Datenbank eingefügt und weitere Änderungen vorgenommen.
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_string);
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
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)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Forumregeln |
Alle Zeitangaben in WEZ +2. Es ist jetzt 13:18:47 Uhr.