chillor Geschrieben 22. Oktober 2010 Geschrieben 22. Oktober 2010 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(); } } 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(); } } 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. Zitieren
perdian Geschrieben 22. Oktober 2010 Geschrieben 22. Oktober 2010 Was du machen möchtest ist komplett entgegen jeglicher objektorientierter Ansätze und wirkt deshalb auch unnatürlich und schwierig für dich. Was musst du machen? Die Zwei-Minuten-Lösung gibt es da leider nicht - du solltest dich intensiv mit dem Konzept OO im Allgemeinen und Java im Speziellen beschäftigen und wirst, wenn du das ganze verstanden hast, automatisch zu deiner Lösung kommen. Zitieren
The-First-Tiger Geschrieben 23. Oktober 2010 Geschrieben 23. Oktober 2010 Hey, also erstmal hast du da glaube ich etwas falsch verstanden. Ein Programm braucht eine Main-Methode als Einstiegspunkt, sprich der PC muss ja wissen, wo er anfangen soll. Das heißt aber nicht, dass jede Klasse! einen Einstiegspunkt, sprich eine Main-Methode braucht. Überleg noch mal genau, du hast kein zusammenhängendes Programm geschrieben, da der PC ja nicht wüsste welche der beiden Mains nun der Anfang ist. Du hast also zwei Programme. Und die nun miteinander zu verbinden ist weitaus schwieriger, als das was du eigentlich machen möchtest. Bennen die Main in deiner Klasse DB um in etwas Sinnvolles, das ungefähr beschreibt was es macht. Soetwas wie zB. queryStatement und übergib dieser Methode dann dein Statement. Etwa so: public void queryStatement(String statement) Nun kannst du innerhalb dieser Methode auf deinen String statement zugreifen. Die Deklaration von deinem Statement innerhalb der Methode brauchst du dann nicht mehr. Wenn du so weit bist, dann kannst du in deiner Klasse Datei Einlesen, die noch immer die Main hat, innerhalb der Main ein Object von deiner Klasse DB anlegen. Etwa so: DB database = new DB(); Jetzt kannst du dein ausgelesenes Statement einfach an dein Objekt übergeben. Etwa so: database.queryStatement(statement); An diesem Punkt spring dann dein Programm in die Methode deines Objectes database, welches ja vom Typ DB, also der Klasse DB ist, und führt den Code, den du dort definiert hast aus. Ich hoffe das ganze hilft dir etwas den Anfang zu finden und etwas genauer zu verstehen, was OOP ist. Setz dich aber auf jeden Fall noch einmal genauer mit dem Konzept der OOP auseinander ;-) Ein Anfang ist es aber auf jeden Fall =) Zitieren
chillor Geschrieben 26. Oktober 2010 Autor Geschrieben 26. Oktober 2010 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?. 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; } } 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]); } } Zitieren
Der_Lampe Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 dein statement wird ja als bestimmter parameter übergeben z.b. als erster parameter dann hast du ja zugriff darauf und kannst ihn "speichern" mit String stmt=args[0] setz dich zum übergeben an deiner klasse mal mit parametern auseinander, dann solltest du drauf kommen wie du das statement deiner methode übergeben kannst Zitieren
flashpixx Geschrieben 26. Oktober 2010 Geschrieben 26. Oktober 2010 Warum Du zweimal über die Daten drüber läufst ist mir nicht klar, Du kannst einmal über alle Zeilen laufen, je eine Zeile lesen und dann direkt verarbeiten. Außerdem solltest Du nicht mit statischen Arrays arbeiten, sondern mit Listen z.B. ArrayList oder Vector Bitte unbedingt einmal überdenken! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.