Daten aus Datenbank in Textdatei eintragen

Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich hab mich jetzt abgemüht und weiß nicht mehr weiter. Es handelt sich nur noch um eine Zeile (denke ich zumindest), dann bin ich fertig. Nur ich weiß im Moment nicht mehr wie das gehen soll. Also mein Problem ist dass ich nicht weiter weiß wie ich die Daten aus der Datenbank in eine Textatei bringe. Heir mal mein Code:

Code:
/*Includes*/
#include <stdio.h>
#include <mysql.h>
#include <stdlib.h>


/*Prototypen*/
int connect_DB();
void close_conect(MYSQL*);
void create_file(MYSQL*);


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

        /*Aufruf der Funktionen*/
        connect_DB();

        return 0;
}/*Ende der Funktion main*/


/*----------------------------------------------------------------------------*/
/*Diese Funktion stellt eine Verbindung zur Datenbank (Alarmmanager) her*/
int connect_DB() {

        /*Variablen*/
        MYSQL *conn;        /*Fuer Verbindung benoetigt*/

        /*Verbindungsaufbau zum MySQL-Server mit Fehlerabfrage*/
        conn = mysql_init(NULL);
        if (mysql_real_connect( conn,
                                "2.9.153.47",
                                "root",
                                "root",
                                "wlan",
                                3306,
                                NULL,
                                0) == NULL) {
                fprintf(stderr, "Fehler mysql_real_connect(): "
                        "%u (%s)\n", mysql_errno(conn), mysql_error(conn));
                exit(EXIT_FAILURE);
        }


        /*Funktionsaufrufe*/
        create_file(conn);              /*Datei erstellen und Daten hinein schreiben*/
        close_conect(conn);     /*DB-Verbindung schliessen*/

        return 0;
}/*Ende der Funktion connect_DB*/


/*----------------------------------------------------------------------------*/
/*Mit Hilfe dieser Funktion wird die Verbindung zur Datenbank wieder
  geschlossen und der belegte Speicher wird frei gegeben*/
void close_conect(MYSQL *mysql) {
        mysql_close(mysql);
}/*Ende der Funktion close_conect*/


/*----------------------------------------------------------------------------*/
/*Ueber diese Funktion wird eine Datei erstellt und mit dem Inhalt der Tabelle
  trace_data gefuellt*/
void create_file(MYSQL *conn) {
        FILE *datei;

        datei = fopen("/home/tracer/wlan_DB/file_writer/test.txt", "w+");
        /*Fehlerabfrage*/
        if (datei == NULL) {
                fprintf(stderr, "Fehler beim erstellen der Datei\n");
        }

        /*Inhalt der Tabelle trace_data in Datei schreiben*/
        const char *sql = "SELECT * INTO OUTFILE '/home/tracer/wlan_DB/file_writer/test.txt' \
                           FIELDS TERMINATED BY',' LINES TERMINATED BY '\n' \
                           FROM trace_data";

        fwrite(sql, datei);

        /*Datei schliessen*/
        close(datei);

}/*Ende der Funktion create_file*/


In meiner letzten Funktion liegt der Fehler. Ich weiß einfach nicht mit welchem Befehl ich die Variable sql in die Datei bekomme! Könnt ihr mir da helfen?
 
Irgendwie scheinen beim fwrite()-Aufruf noch Parameter zu fehlen, das müsste doch eher so aussehen:
C++:
fwrite(sql, sizeof(char), sizeof(sql), datei);

Gruß
MCoder
 
Hallo!

Zuerst einmal danke für die schnelle Antwort, nur hab ich auch gleich wieder schlechte Nachrichten. Das mit dem fwrite(...) funktioniert nicht. Das einzige was dann in meiner Datei steht ist "SELE". Komisch aber wahr.

Hat jemand ne Idee warum das so ist und wie ich die Daten in die Datei bekomme?
 
Ja du hast recht, so kann's nicht gehen. Der Ausdruck sizeof(sql) funktioniert nicht.
Entweder bestimmst du die Länge anders (händisch Buchstaben zählen :-) ) oder schreibst es so:
C++:
const char sql[] = "....";

Gruß
MCoder
 
Hallo!

Also ich hab das jetzt mal so gemacht:

Code:
/*Includes*/
#include <stdio.h>
#include <mysql.h>
#include <stdlib.h>


/*Prototypen*/
int connect_DB();
void close_conect(MYSQL*);
void create_file(MYSQL*);


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

        /*Aufruf der Funktionen*/
        connect_DB();

        return 0;
}/*Ende der Funktion main*/


/*----------------------------------------------------------------------------*/
/*Diese Funktion stellt eine Verbindung zur Datenbank (Alarmmanager) her*/
int connect_DB() {

        /*Variablen*/
        MYSQL *conn;        /*Fuer Verbindung benoetigt*/

        /*Verbindungsaufbau zum MySQL-Server mit Fehlerabfrage*/
        conn = mysql_init(NULL);
        if (mysql_real_connect( conn,
                                "2.9.153.47",
                                "root",
                                "root",
                                "wlan",
                                3306,
                                NULL,
                                0) == NULL) {
                fprintf(stderr, "Fehler mysql_real_connect(): "
                        "%u (%s)\n", mysql_errno(conn), mysql_error(conn));
                exit(EXIT_FAILURE);
        }


        /*Funktionsaufrufe*/
        create_file(conn);              /*Datei erstellen und Daten hinein schreiben*/
        close_conect(conn);     /*DB-Verbindung schliessen*/

        return 0;
}/*Ende der Funktion connect_DB*/


/*----------------------------------------------------------------------------*/
/*Mit Hilfe dieser Funktion wird die Verbindung zur Datenbank wieder
  geschlossen und der belegte Speicher wird frei gegeben*/
void close_conect(MYSQL *mysql) {
        mysql_close(mysql);
}/*Ende der Funktion close_conect*/


/*----------------------------------------------------------------------------*/
/*Ueber diese Funktion wird eine Datei erstellt und mit dem Inhalt der Tabelle
  trace_data gefuellt*/
void create_file(MYSQL *conn) {
        FILE *datei;

        datei = fopen("/home/tracer/wlan_DB/file_writer/test.txt", "w+");
        /*Fehlerabfrage*/
        if (datei == NULL) {
                fprintf(stderr, "Fehler beim erstellen der Datei\n");
        }

        /*Inhalt der Tabelle trace_data in Datei schreiben*/
        const char sql[] = "SELECT * INTO OUTFILE '/home/tracer/wlan_DB/file_writer/test.txt' \
                           FIELDS TERMINATED BY',' LINES TERMINATED BY '\n' \
                           FROM trace_data";

        fwrite(sql, sizeof(char), sizeof(sql), datei);

        /*Datei schliessen*/
        close(datei);

}/*Ende der Funktion create_file*/

Leider funktioniert es nicht so wie ich das wollte! Er schreibt mir nur "SELECT * INTO OUTFILE ..." in die Datei! Nicht jedoch den Inhalt der Tabelle! Was mach ich denn falsch?
 
Hat niemand eine Idee oder einen Tipp? Mittlerweile bin ich am Verzweifeln! Google gibt nichts her und ich hab keine Ahnung wie ich den SQL String in eine Datei schreiben könnte! Muss es vielleicht mit mysql_query() gehen?
 
Ach so, du wolltest nicht die SQL-Anweisung selbst in die Datei schreiben, sondern diese ausführen.
Dann musst du natürlich eine mysql-Funktion verwenden. Ich habe die verfügbaren Funktionen jetzt nicht parat. Das könnte vielleicht sowas wie "mysql_query()" sein; schaue mal in der MySQL-API nach.

Gruß
MCoder
 
Hi.

Du müßtest natürlich eine Anfrage an die Datenbank stellen.

Lediglich eine Datenbankverbindung zu öffnen und irgendeinen String zusammenzubasteln reicht da komischerweise nicht. ;-]

Außerdem solltest du beachten das die Anweisung "SELECT ... INTO OUTFILE" die Dateien (logischerweise) auf dem Server kreiert und nicht auf dem Client.

Um die Daten vom Server auf den Client-Rechner in eine Datei zu speichern müßtest du die Anfrage stellen. Dann bekommst du eine Resultatmenge die du dann in einer Schleife zeilenweise verarbeiten kannst.

Gruß
 
Hallo deepthroat!

Danke für die Hilfe, aber ich bräuchte da eine kleine Hilfestellung. Bin noch ein ziemlicher Newbie. Kannst du mir mal einen Beispielcode posetn? Wäre echt super nett!
 
Tja ich bin echt verzweifelt! Hab keine Ahnung was ich machen soll! Also um genau zu sein weiß ich nicht wie es funktionieren soll. Kann mir jemand mal ein Beispiel zeigen? Danke
 
Zurück