Hallo!
Ich hab da ein Problem mit meinem Programm. Es gibt zwei SQL-Statements, die ausgeführt werden müssten. Das eine Statement schreibst den Inhalt einer erzeugten Datei in die Datenbank (was auch super klappt) und das zweite sollte mir (in einer Schleife die Datei nochmal durchgehen und wenn die If erfüllt, dann in die Datenbank schreiben) das auch machen. Leider führt mein Programm nur den ersten SQL-Befehl aus.
Hier mal der Code:
Vielleicht kann mir jemand sagen wo der Fehler liegt. Ich hab schon so einiges versucht, aber nichts führte zu einem Ergebnis! Ich hab die Stelle (von der ich glaube, dass sie der Fehler ist) markiert. Schon mal danke im Vorraus für euere Antworten!
Ich hab da ein Problem mit meinem Programm. Es gibt zwei SQL-Statements, die ausgeführt werden müssten. Das eine Statement schreibst den Inhalt einer erzeugten Datei in die Datenbank (was auch super klappt) und das zweite sollte mir (in einer Schleife die Datei nochmal durchgehen und wenn die If erfüllt, dann in die Datenbank schreiben) das auch machen. Leider führt mein Programm nur den ersten SQL-Befehl aus.
Hier mal der Code:
Code:
/*Includes*/
#include <stdio.h>
#include <mysql.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
/*Defines*/
#define LINE_SIZE 4096
/*Prototypen*/
int connect_DB();
char* mystrtok(char*, char);
void close_conect(MYSQL*);
void writeInDatabase(MYSQL*);
void strings_ausgeben(const char*);
void errorHandler();
/*globale Variablen*/
extern int errno;
/*----------------------------------------------------------------------------*/
/*Hauptfunktion main startet das Programm*/
int main(int argc, char *argv[]) {
/*Variablen*/
int i;
const char *path;
/*Argumente pruefen*/
for(i = 0; i < argc; i++) {
if (argc < 2) {
perror("Zu wenig Argumente(!Pfad fehlt!)");
errorHandler();
}
}
/*path auf das erste Argument nach Programmnamen setzen...*/
path = argv[1];
/*...und den Pfad dann uebergeben*/
strings_ausgeben(path);
/*Aufruf der restlichen Funktionen*/
connect_DB();
return 0;
}/*Ende der Funktion main*/
/*----------------------------------------------------------------------------*/
/*Funktion um das Programm im Fehlerfall zu beenden*/
void errorHandler() {
exit(EXIT_FAILURE);
}/*Ende der Funktion errorHandler*/
/*----------------------------------------------------------------------------*/
/*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",
"MyDB",
3306,
NULL,
0) == NULL) {
fprintf(stderr, "Fehler mysql_real_connect(): "
"%u (%s)\n", mysql_errno(conn), mysql_error(conn));
errorHandler();
}
/*Funktionsaufrufe*/
writeInDatabase(conn); /*Eintrag der Daten in Datenbank*/
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*/
/*----------------------------------------------------------------------------*/
/*Hier wird die Zeichenkette ermittelt, die spaeter auch in die Datenbank
eingetragen werden soll (Zeile fuer Zeile)*/
void strings_ausgeben(const char *path) {
/*Variablen*/
int i;
FILE *super;
FILE *datei;
char *word = NULL;
char gelesene_Kommas = ',';
char buffer[LINE_SIZE];
const char *pfadzuSuper;
pfadzuSuper = "/home/tracer/wlan_DB/alert_files/super.txt";
/*Datei anlegen*/
super = fopen(pfadzuSuper, "wt");
if (super == NULL) {
perror("Fehler beim Oeffnen der Datei zum Schreiben(Funktion strings_ausgeben) ");
errorHandler();
}
/*Datei zum Lesen oeffnen*/
datei = fopen(path, "rt");
if (datei == NULL) {
perror("Fehler beim Oeffnen der Datei zum Auslesen(Funktion strings_ausgeben) ");
errorHandler();
}
/*Jede Zeile durchgehen und immer den, in Token zerlegten String, einlesen*/
while(fgets(buffer, LINE_SIZE, datei) != NULL) {
word = mystrtok(buffer, gelesene_Kommas);
for(i = 0; word != NULL; i++) {
if (i == 12) {
/*Das Eingelesene wird in die Datei
super.txt geschrieben*/
fprintf(super, "%s\n", word);
break;
}
word = mystrtok(NULL, gelesene_Kommas);
}
}
/*Datei schliessen*/
fclose(datei);
fclose(super);
}/*Ende der Funktion datei_ausgeben*/
/*----------------------------------------------------------------------------*/
/*Diese Funktion uebernimmt die Aufgabe der C-eigenen Funktion strtok()
Mit der C-eigenen Funktion wurden leere Teile zwischen den Kommas
ueberlesen und der naechste Wert wurde ausgegeben. Diese Funktion
arbeitet sauberer*/
char* mystrtok(char *s, char delim) {
/*Variablen*/
char *curr = NULL;
char *ret = NULL;
static char *buffer = NULL;
if (s) {
buffer = s;
}
curr = buffer;
if (curr) {
/*Einzelne Characters durchgehen solange bis Komma
oder ein \0 Zeichen*/
while(*curr != delim && *curr != '\0') {
curr++;
}
if (*curr == '\0') {
return NULL;
}
*curr = '\0';
ret = buffer;
buffer = curr + 1;
}
return ret;
}/*Ende der Funktion mystrtok*/
/*----------------------------------------------------------------------------*/
/*Diese Funktion schreibt den Inhalt der Datei in die Datenbank*/
void writeInDatabase(MYSQL *conn) {
/*Variablen*/
const char *sql;
int i;
FILE *datei;
char line[LINE_SIZE];
char *delim = "\0";
char *word = NULL;
char *path;
const char *sqltext;
sqltext = "INSERT INTO test (DST_NAME) VALUES ('T-Mobile')";
path = "/home/tracer/wlan_DB/alert_files/super.txt";
/*Datei oeffnen mit Fehlerabfrage*/
datei = fopen(path, "rt");
if (datei == NULL) {
perror("Fehler beim Oeffnen der Datei(Funktion check_name) ");
errorHandler();
}
/*SQL-Befehl*/
sql = "LOAD DATA LOCAL INFILE \
'/home/tracer/wlan_DB/alert_files/super.txt' \
INTO TABLE test \
LINES TERMINATED BY '\n' \
(SRC_NAME)";
/*Daten des Files in die Tabelle schreiben*/
mysql_query(conn, sql);
/*Fehlerabfrage*/
if (sql != 0) {
fprintf(stderr, "%s\n", mysql_error(conn));
fprintf(stderr, "%s\n", sql);
errorHandler();
}
HIER scheint er nicht rein zu laufen - WARUM?
while(fgets(line, LINE_SIZE, datei) != NULL) {
word = strtok(line, delim);
for(i = 0; word != NULL; i++) {
if (*word == 'N') {
fprintf(stderr, "%s\n", "Hallo");
mysql_query(conn, sqltext);
/*Fehlerabfrage*/
if (sqltext != 0) {
fprintf(stderr, "%s\n", mysql_error(conn));
fprintf(stderr, "%s\n", sqltext);
errorHandler();
}
break;
}
word = strtok(NULL, delim);
}
}
/*Datei wieder schliessen*/
fclose(datei);
}/*Ende der Funktion writeInDatabase*/
/*----------------------------------------------------------------------------*/
/*Funktionsbeschreibung*/
Vielleicht kann mir jemand sagen wo der Fehler liegt. Ich hab schon so einiges versucht, aber nichts führte zu einem Ergebnis! Ich hab die Stelle (von der ich glaube, dass sie der Fehler ist) markiert. Schon mal danke im Vorraus für euere Antworten!