Seiten

Donnerstag, 10. Februar 2011

JAVA und XML 10-2-2011

Der heutige Tag bestand fast ausschließlich aus der Suche nach Programmierfehlern, was eigentlich beweisen müsste, dass ich mich dem echten Programmierbusiness doch weiter genähert habe. Die "letzten Schliffe" die die Anwendung noch gebraucht hat waren doch mal wieder ein paar schliffe mehr als erwartet.

Im Moment läuft das Ganze unter eclipse und versucht die bereits erwähnten xml Dateien in die SQL-Datenbank zu schreiben und die Geschriebenen Daten zu weiteren Vergleichen heranzuziehen. Die Fertigstellung einer .exe wird folgen, sobald der jetzige Vorgang und das Bugfixing abgeschlossen sind. Momentan sind es um die 18000 Einträge und ich habe schon befürchtet, dass der Rechner damit ausgelastet ist, weil keine weiteren Einträge mehr hinzukamen. Aber die Logfileausgabe zeigt, dass die Anwendung erfolgreich weiter läuft. Allerdings wird das ganze meinen Rechner wohl das ganze Wochenende in Beschlag nehmen wird. Rechnerisch wird es wohl Samstagabend werden.

Es gibt einen Haufen Dinge, die ich, sofern ich eine solche Anwendung erneut schreiben sollte ändern würde, wie etwa einige Vergleiche und Zugriffe, die die Rechenleistung optimieren würden. Vor allem die Datenbankzugriffe sollten sich am absoluten Minimum bewegen, und ich bin sicher, dass der ein oder andere Zugriff der im Moment noch im Code steht verhindert werden kann.

Notwendig wird das aber erst, wenn die Dateien an Größe weiter gewinnen und die verfügbare Rechenleistung konstant bleibt.

Als nächstes steht die Barcodescanner-Anwendung auf der Agenda. Dieses Mal müssen evtl. sogar 3 oder mehr verschiedene Sprachen zum Einsatz kommen (SQL mitgerechnet^^)

Mittwoch, 9. Februar 2011

JAVA und XML 9-2-2011

So heute war ein ziemlich frustrierenden javaToXML Entwicklungstag. Die eigentlichen Lösungen scheienen alle bereits vorhanden zu sein, aber es war unglaublich zäh und viele Fehler haben mich ungemein gebremst.

Erst wollte ich damit beginnen den Code, der das XML-Dokument Stückchenweise ( Nodeweise ) ausliesst ein bischen besser zu verstehen. Danach habe ich einen entsprechenden Setter in der Schleife für jeder einzelne Attribut vergeben. Beim Kopieren habe ich einen kleinen Fehler gemacht und diesen Fehler habe ich dann eine halbe Stunde gesucht.
Als dieses Problem aus der welt war ( ein Bezeichner geb den Falschen wert weiter -> immer fleißig Ausgaben produzieren, damit man sich nicht ewig fragen muss, was denn nun falsch läuft ), musste ich feststellen, dass die von mir kopierte Datenbankanbindung nicht funktioniert hat. Weitere 45 Minuten gingen ins land, bevor ich gemerkt habe, dass die Datenbankanbindung eine Bibliothek benötigt, die nicht in der JRE enthalten ist. Mir wurde das zwar gesagt, aber bis ich es bemerkte dauerte es. Als ich wiederum kapiert hatte, wo der Fehler lag und die Datenbank angebunden hatte musste ich feststellen, dass die vorgefundenen Mehtoden so gar nicht das taten, was ich eigentlich von ihnen wollte. Also begann ich alles umzuschreiben bis ich nach einer ganzen weile bemerkte, das das garnicht nötig war. Tonnenweise Änderungen rückgängig gemacht und weiter im Text. Als nächstes probiert automatisiert Werte aus den nodes in die Datenbank zu schreiben. Festgestellt, das es Probleme bei den Attributsbezeichnugen gibt "geschlossene Klammern". Diese Attributsbezeichnug manuell geändert und festgestellt, dass es Probleme mit dem Automatisch generierten Datum gibt. Ewig nach einer Lösung gesucht und diese dann schließlich gefunden -> Attribut mit der "?" funktion eingefügt. Danach merkte ich, das die SQL Überträger ein Riesen-Problem mit den in den Attributsbezeichnugen massiv vorhandenen Leerzeichen gibt. Es wird wohl darauf hinauslaufen, dass das Leerzeichen mit irgendwas anderem ersetzt werden muss. Das kommt dann morgen....

Dienstag, 8. Februar 2011

JAVA und XML 8-2-2011

Weiter bei der Entwicklung des XML Einlesewerkzeuges für die Datenbank. Abhilfe schaffte jetzt schnell und kurzfristig dieser code:

  try {
  File file = new File("c:\\MyXMLFile.xml");
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  Document doc = db.parse(file);
  doc.getDocumentElement().normalize();
  System.out.println("Root element " + doc.getDocumentElement().getNodeName());
  NodeList nodeLst = doc.getElementsByTagName("employee");
  System.out.println("Information of all employees");

  for (int s = 0; s < nodeLst.getLength(); s++) {

    Node fstNode = nodeLst.item(s);
    
    if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
  
           Element fstElmnt = (ElementfstNode;
      NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname");
      Element fstNmElmnt = (ElementfstNmElmntLst.item(0);
      NodeList fstNm = fstNmElmnt.getChildNodes();
      System.out.println("First Name : "  ((NodefstNm.item(0)).getNodeValue());
      NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname");
      Element lstNmElmnt = (ElementlstNmElmntLst.item(0);
      NodeList lstNm = lstNmElmnt.getChildNodes();
      System.out.println("Last Name : " ((NodelstNm.item(0)).getNodeValue());
    }

  }
  catch (Exception e) {
    e.printStackTrace();
  }


von 

http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html

Benötigt werden folgende Packages:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


Im oberen Teil des codes wird sich in der Baumstruktur des  XML  Dokumentes nach der Konvertierung in ein "Document" an die einzelnen Einträge "hinabgehangelt" und diese dan Ausgegeben.

Für die von mir angestrebte Lösung müssen diese Daten nun mit der Datenbank abgeglichen werden. Dies geschieht mithilfe der SQLObject - Klasse die bereits geschrieben wurde. Vermutlich werde ich aber morgen einige kleinere Änderungen für den Abgleich daran durchführen. 

Dann gab es heute noch Noten in ITS. Bin zufrieden, hätte aber malwieder besser sein können. 

Montag, 7. Februar 2011

Java und XML 7-2-2011

Heute begann die Arbeit am nächsten Tool, mit dessen Hilfe eine gigantische XML-Datei ausgewertet werden soll. Es handelt sich dabei um eine sehr einfache Struktur. Es gibt etwa 20 k Elemente, mit 6 Unterattributen. Diese Werte sollen ausgelesen und in einer Datenbank gespeichert werden, wenn sich etwas seit dem zuletzt vorgenommenen Eintrag geändert hat. Das Problem dabei ist in erster Linie nicht nur die Größe der Datei, sondern auch das Parsen der XML File und seiner Struktur. Ich habe einen ganzen Haufen von Paketen und Klassen gefunden, die das übernehmen können sollten. Irgendwie habe ich heute aber noch keinen Ansatz gefunden, wie ich das einlesen machen soll. Anscheinend ist die Java DOM - Package für diese Tätigkeit ausgelegt. Im Endeffekt kann es sich dabei doch auch nur um einen Parser handeln, der das Dokument durchsucht und die einzelnen Tags ausgibt.
Wenn ich es recht bedenke werde ich ein XML Objekt erzeugen, dass ein Objekt in der XML Datei heraussucht und die Attribute im XML - Objekt speichert. Dieses wird dann mit der Datenbank verglichen. Im Anschluss wird der nächste Eintrag gesucht und dieselbe Prozedur wiederholt sich, bis das gesamte Dokument abgearbeitet ist.
Meine Fortschritte morgen sind hoffentlich etwas besser, heute hatte ich aufgrund der Fülle an Lösungsvorschlägen offensichtlich etwas die Orientierung verloren. Morgen tritt möglicherweise Klarheit auf.