ausgelesene SQL-Statements ausführen

chillor

Mitglied
Hallo,

ich habe zwei funktionierende Klassen und möchte nun die eingelesenen SQL-Statements aus einer Text-Datei (siehe Klasse->DateiEinlesen) ausführen. Die Klasse DB ist für die Datenbankanbindug zuständig. Nun sollen die Statements aus der Klasse "DateiEinlesen" in die Klasse "DB" überführt werden, um dort diese auszuführen.
Wie könnte der Quellcode aussehen, um meine Problematik zu lösen?

Java:
public class DateiEinlesen {

    public static void main(String[] args) throws Exception {

        //Variable deklarieren
        String statement;

        //Ort der Datei
        File file = new File("c:/x/SQL_Statements.txt");

        //Zeilenweise auslesen
        BufferedReader br = new BufferedReader(new FileReader(file));
   
        while ((statement = br.readLine()) != null) {
            System.out.println(statement);
        }

        br.close();

    }
}


Java:
public class DB {

    public static void main (String[] args) throws SQLException {
        try {
            DB db = new DB("x");
            ResultSet rs = db.query("//hier soll das erste ausgelesene Statement hin");

            rs.first();
            System.out.println("aktualisiert = "+rs.getInt("aktualisiert"));
            rs.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
        
        try {
            DB db = new DB("x");
            ResultSet rs = db.query("//hier soll das zweite ausgelesene Statement hin");

            rs.first();
            System.out.println("neu = "+rs.getInt("neu"));
            rs.close();
        } catch(Exception e) {
            e.printStackTrace();
        }



    }
 

ARadauer

Top Contributor
Die main Methode ist der Einstiegs Punkt zum Starten eines Progammes. Es macht wenig sind in einem Programm zwei main Methoden zu haben...

Mach eine Klasse die die Funktionalität besitzt die Textdatei einzulesen und die zeilen als ArrayList zurück zu geben.
Mach eine Klasse die die Funktionalität besitzt eine Liste mit Strings entegenzunehemn und diese als Query auszufürhen.

Mach eine Klasse mit der Main methoden die die anderen beiden Klassen benutzt um die Queries zu lesen und auszuführen...
 

timbeau

Gesperrter Benutzer
Sobald du dann die beiden Klassen instanziierst kannst du alle Methoden dieser Klasse nutzen und dort dann die SQl-Parameter übergeben.
 

chillor

Mitglied
Hallo,

ich habe nun das Ganze umgesetzt, wie oben beschrieben. Da aber mehrere Statements ausgelesen werden, müssen diese separiert werden. Wie teile ich die ausgelesenen Statements aus der Text-Datei so, dass ich mehrer querys abschicken kann?

Danke im Vorraus.
 
S

SlaterB

Gast
auf korrekte Weise,
wenn jede Zeile ein Statement ist, dann Zeilenumbruch,
sonst nach ; suchen oder komplizierter nach neuen SELECT usw.

überlege wie du es selber mit Kopf und Schere, Papier und Bleistift machen würdest, nichts anderes soll das Programm machen
 

chillor

Mitglied
Hallo,

dass Programm wird doch jetzt etwas komplexer:).
Der Ablauf könnte wie folgt aussehen:
-Start (per Task ausführbar)
-Nutzer wählt SQL-Statements?
- nein->Stop->Liste anzeigen mit Statements

- ja->Anfang & Enddatum definieren?
nein->Standartwerte für Statements setzen
ja->Eingabe der Daten
- ausführen der Statements
-Ergebnisse werden standardmäßig als Textdatei abgespeichert

Hat jemand eventuell sowas schon programmiert? Würde mich über Quellcode freuen!

Danke im Vorraus.
 

timbeau

Gesperrter Benutzer
Wo sind denn die einzelnen Probleme?

Die Variablen einzulesen ist ja kein großes Problem wobei man natürlich die üblichen Fehler abfangen muss. Dann musst du die SQL-Queries laden und diese enthalten dann eben schon die vorgefertigten Variablen.

Diese werden dann auf die DB losgelassen und die Ergebnisse per Filewriter o.ä. gespeichert.
 

chillor

Mitglied
Hallo,

da ich noch ein Anfänger bin, habe ich Schwierigkeiten eine Main zu den zwei Klassen "DateiEinlesen" und "DB" (siehe oben) passend zu erstellen. In der Main muss ja das eingelesene Statement der Klasse "DB" übergeben und ausgeführt werden. Ich habe leider keinen Plan wie ich die Main erstellen muss, um dan ein Ergebniss der Abfrage zu erhalten. Könntet ihr mir da weiterhelfen?

Danke im Vorraus.
 

ARadauer

Top Contributor
Nein, sorry das sind absolute Grundlagen... entweder du beschäftgst dich damit und ließt dich mal in die grundlagen ein, 1-7 Kapitel im Java insel Buch oder du bezahlst dafür...
 

nrg

Top Contributor
ich würde da eine ConnectionWrapper schreiben, die erstmal deine Datenbank anhand von Properties initialisiert. Dann dort Funktionen anbieten, wie z.B.

public void executeStatement(String statement)...

public ResultSet executeQuery(String query)....

dort führst du dann einfach deine Statements bzw. Querys aus.

Dann nimmst du ne ScriptEngine (z.B. Rhino JS) und übergibts dieser deine Instanz von der connection:

deineEngine.put("meineConnection", deinConnectionsObjekt);

Jetzt kannst du in properties o.ä. Statements definieren:

meineConnection.executeStatement(deinStatement);

Somit bist du komplett variabel, kannst der Engine noch weitere Variablen übergeben, die dann alle in deinem Statement verwendbar sind und dir steht zudem die komplette JavaScript API zur Verfügung.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
weil 99.99% aller Foren-Themen ohne ScriptEngine auskommen, was hat das speziell hier für eine Bedeutung?
 

henpara

Bekanntes Mitglied
bau dir einfach klassen, die deine aufgaben übernehmen.
überleg dir, was die andre klasse an infos haben muss, und mach entsprechende (statische) methoden.
in der main methode rufst du dann NUR die methoden der einzelnen klassen in der reihenfolge auf, wie du sie brauchst.

zB
klasse db-connection
aufgabe. stellt verbindung zur db her und bearbeitet statements.
klasse texte/statements einlesen
aufgabe: statements verfassen und mit resulsets textdateien schreiben
klasse gui
aufgabe: grafische benutzeroberfläche, zur auswahl der statements, button fürs schreiben etz..

fertig.
wie schon gesagt, programmieren musst du schon selber.
 

ARadauer

Top Contributor
Ich versteh nicht ganz wozu ich hier die Java Script Engine benötige.
Das soll nicht heißen, dass es keinen Sinn macht, sondern dass ich es nicht verstehe.

Ich sehe hier keine Verwendung dafür....
 

nrg

Top Contributor
ja gut zugegeben. hier etwas am ziel vorbeigeschossen. war mit den gedanken ein bisschen wo anders.

@ARa: gib dir ja recht. hatte den Thread nicht komplett gelesen und das auf den ersten Blick falsch interpretiert.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
@henpara: lass es ... du kannst dem Threadsteller schon erklären wie man einen Tisch baut, aber wenn der nicht weiß was ein Hammer ist, wird das wenig Erfolg haben...
 

chillor

Mitglied
Hallo,

ich habe jetzt mal eine Klasse zum einlesen nach meinem Geschmack erstellt (siehe unten).

Ich habe jetzt noch paar Probleme bei der Main. Meinen Ansatz kann man unten sehen. Ich weiß zwar, dass es für manche trivial ist, aber ich hab da Probleme. Im Grunde genommen ist es nur eine Konsolenanwendung. Wie man sehen kann, möchte ich einen Schalter abfragen, der vom Nutzer aktiviert wird, sobald man das passende Statement (mind. ein Statement) gewählt hat. Das gewählte Statement kann dan sofort übernommen werden.

Mich würde es interessieren, ob die Prüfung der Parameter stimmt und wie ich das ausgewählte Statement aus der Konsole sofort abspeicher und der Klasse DB zum ausführen übermittle?.
Code:
public class ReadData {

    /**
	 *
	 * @return
	 * @throws Exception
	 */
	public String[][] read_file()throws Exception {

        //Ort der Datei
        File file = new File("c:/SQL_Statements.txt");

        //Zeilenweise auslesen
        BufferedReader br = new BufferedReader(new FileReader(file));

		//Deklaration
		String statement;
		int anzahlstatements=0;
		//Ermitteln der Anzahl an Zeilen
		while((statement = br.readLine()) !=null) {
			++anzahlstatements;
		}

		String[][] array = new String[anzahlstatements][2];
		br.close();
		br = new BufferedReader(new FileReader(file));
        for(int i = 0; i < array.length; i++)
        {
			//pro Zeile
			statement = br.readLine();
			String tmp[] = statement.split("\",,,\"");//Felder aus Datei für Zeile i in tmp eingelesen
			if(tmp.length != array[i].length) throw new Exception("größen stimmen nicht überein");
            for(int j = 0; j < array[i].length; j++)
            {
				//pro Feld
				array[i][j] = tmp[j];
            }
        }
        br.close();
		return array;
    }
}

Code:
public class Main {

		public static void main(String[] args) throws Exception{
		
		//1. eingabeparameter prüfen (statement gewählt? zeitangaben->variablen,etc.)
			
		//die Argumente der Kommandozeile, die sich im Feld args[] befinden werden ausgegeben
		for ( int i = 0; i < args.length; i++ )
			System.out.println( args[i] );

		//Um zu testen, ob auf der Kommandozeile der Schalter --name gesetzt ist
		String Schalter = "--name";
		String Kommandozeile = args[i];
		if(Schalter.equals(Kommandozeile))
		{
			System.out.println("beinhaltet --name");
		}
		else{
			System.out.println("beinhaltet nicht --name");
		}

			//3. ausführen
			//->DB::

			//4. Ausgabe in Textdatei speichern (additiv? überschreibend? einzelne Dateien?)
			//->StoreValues::

			//5. Ausgabe für evtl. weitere Exportvarianten

			//6. Ende

			//Objekt ReadData
			ReadData r1 = new ReadData();
			//Statements ausgeben
			String[][] test = r1.read_file();
			//Testweise test ausgeben
			System.out.println("Das Statement mit dem Namen "+test[0][1]+" lautet:");
			System.out.println(test[0][0]);
			System.out.println("Das Statement mit dem Namen "+test[1][1]+" lautet:");
			System.out.println(test[1][0]);
		}
}
 
S

SlaterB

Gast
wie soll man beurteilen was du alles für Argumente hast, was als richtig oder falsch ist?
man kann nur lockerleicht den Programmablauf vorhersagen:

ist z.B. der Aufruf
> java Programmname a --name
dann ist einfach ersichtlich der erste Parameter a, der zweite --name,

du prüfst in einer Schleife jeden Parameter, der erste, a, ist nicht --name, dann schreibt dein Programm also als Ausgabe
"beinhaltet nicht --name"
ob das mal richtig ist?

------

direkt jedes Statement abzuspeichern geht vor allem dadurch, indem der Speichercode in die read_file-Methode direkt in die Schleife rein geschrieben wird, etwas unsauber aber wohl das einzig realistische im kleinen Maßstab
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
K Kommentare bei einzeiligen IF-Statements Allgemeine Java-Themen 11
F Stilfrage: IF-Statements Allgemeine Java-Themen 28
T .Jar kann man nicht ausführen Allgemeine Java-Themen 18
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
S Buttons nacheinander ausführen Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
J Jar-Datei ausführen Allgemeine Java-Themen 7
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
F jar File ausführen Allgemeine Java-Themen 14
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
J CMD Befehl in Java Consolenprogramm ausführen Allgemeine Java-Themen 6
L Python in Java ausführen Allgemeine Java-Themen 4
L Eclipse Java Code ausführen Allgemeine Java-Themen 18
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
N Script mit Java ausführen Allgemeine Java-Themen 21
F Java automatisch ausführen Allgemeine Java-Themen 3
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
D Verknüpfung mit Java Ausführen Allgemeine Java-Themen 1
H jar-Datei mit java.exe anstatt mit javaw.exe ausführen Allgemeine Java-Themen 9
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
M Classpath Java App ausführen Allgemeine Java-Themen 2
Javafan01 .sh datei in Java ausführen Allgemeine Java-Themen 1
Javafan01 Ausführen Allgemeine Java-Themen 1
das_leon Hotkey ausführen Allgemeine Java-Themen 1
A Input/Output VBS-Datein mit Java Ausführen Allgemeine Java-Themen 2
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
L HTML Formular ausführen Allgemeine Java-Themen 1
Tommy Nightmare Ausführen von CMD Befehlen Allgemeine Java-Themen 10
H .Sh Datei ausführen programmieren Allgemeine Java-Themen 5
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
M *.class Files ausführen Allgemeine Java-Themen 2
C Ausführen einer .JAR Datei Allgemeine Java-Themen 5
J Batch datei öffnen und als Admin ausführen Allgemeine Java-Themen 43
J Ältere applets ausführen? Allgemeine Java-Themen 0
A Linux bash script ausführen Allgemeine Java-Themen 16
Viktim Bash Script in Java ausführen Allgemeine Java-Themen 6
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
T Programme ausführen.. Allgemeine Java-Themen 3
H Java Anwendungen ausführen Allgemeine Java-Themen 3
T Während des Programmlaufs andere Programme ausführen Allgemeine Java-Themen 1
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
Fischkralle Ausführen von fremden Code Allgemeine Java-Themen 14
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
T Git-Befehle mit Java ausführen Allgemeine Java-Themen 5
Neumi5694 Datei mit erhöhten Rechten ausführen Allgemeine Java-Themen 2
Bananabert Java mit bestimmter GPU ausführen Allgemeine Java-Themen 7
F Mencoder unter Java Ausführen Allgemeine Java-Themen 0
L Jar-Datei in Web ausführen Allgemeine Java-Themen 1
U CMD Befehle als Admin ausführen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
S Shell Commands mit absolutem Pfad ausführen Allgemeine Java-Themen 2
G Umgebungsvariable Jar im Netzlaufverk ausführen Allgemeine Java-Themen 4
K Eclipse Fehler beim Ausführen meines Programms in Eclipse Allgemeine Java-Themen 11
F paintComponent() nicht automatisch ausführen? Allgemeine Java-Themen 5
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
M Java Anwendung ausführen Allgemeine Java-Themen 5
J Code ausführen bei JVM-Zerstörung Allgemeine Java-Themen 15
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
Hoppelmann Befehlszeile an bestimmtem Ort ausführen Allgemeine Java-Themen 2
M Befehl in Runtime ausführen der Eingabe benötigt Allgemeine Java-Themen 3
C Rechnung genau 8 mal ausführen Allgemeine Java-Themen 5
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
F Jar auf Netzlaufwerk ausführen Allgemeine Java-Themen 2
Gossi Java Code in einer GUI eingeben und ausführen? Allgemeine Java-Themen 2
D Code später ausführen Allgemeine Java-Themen 8
Wirago (runnable) JAR-File ausführen Allgemeine Java-Themen 6
S Fehler beim ausführen des HTML Allgemeine Java-Themen 7
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J CMD direkt in Java ausführen Allgemeine Java-Themen 11
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
J Threads Methode in Mainthread ausführen Allgemeine Java-Themen 5
A Jasperreports automatisch ausführen lassen Allgemeine Java-Themen 5
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
T Junit-Tests in Java Klasse ausführen Allgemeine Java-Themen 26
R Jar Datei ausführen Allgemeine Java-Themen 7
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
L Java Quellcode auf Windows 7 ausführen? Allgemeine Java-Themen 3
J Java Datei ausführen Allgemeine Java-Themen 8
DStrohma Kommandozeilen-Programm unendlich lang ausführen Allgemeine Java-Themen 13
truesoul Runtime.getRuntime().exec nebenbei ausführen Allgemeine Java-Themen 12
R Methoden in einem Thread unterschiedlich oft ausführen Allgemeine Java-Themen 4
E Externes bat sichtbar ausführen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben