URL: https://www.overclockers.at/coding-stuff/kurze_java_frage_201199/page_1 - zur Vollversion wechseln!
Wie kann ich in Java auf den aktuellen Projekt-Pfad zugreifen? Ich bilde mir ein das ging mit ner System-Propertie, ich find aber keine passende.
Ich greif zZ nämlich mit dem absoluten Pfad auf zb. Config-Files zu, jetzt will ich das mal ändern, nur mir fällt nicht ein wie das nochmal frunktioniert.
tia
Meinst du damit den Pfad, in dem deine Executable liegt, oder den Pfad, wo du dich beim Aufruf des Programms befindest?
letzteres
-> http://www.roseindia.net/java/examp...urrentDir.shtml
thx, das wars. hab ich bei den System-Properties wohl übersehen...
Ich finde diese Property auch ziemlich besch...eiden benannt, ehrlich gesagt. Ueberall sonst heiszt das "working directory", oder zumindest so aehnlich. Intuitiv wuerde ich, wenn ich "user.dir" lese, auf eine Rueckgabe des Home-Directories des jeweiligen Nutzers, der das Programm gerade ausfuehrt, tippen.
Sowas hab ich mir auch gedacht, als ich mit die Propertys angeschaut hab, desshalb hab ich übers user.dir wohl auch drüber gelesen
Ich hängs mal hier dazu:
Folgendes Problem:
Hab ne Klasse mit zwei Listen (values und values2) die in der Methode init initialisiert werden. Problem: Wenn ich mir Daten aus der DB holen und sie in die Liste values schreibe, befinden sich nach dem Ende des Schleifendurchlaufs die selben Daten auch in der Liste values2...
Ich checks grad voll net, also bitte um Hilfe!Code:public class AddChangeTableModel extends javax.swing.table.AbstractTableModel { private int id; private Area area; private List<String> cols; private List<Data> values; private List<Data> values2; /** Creates a new instance of AddChangeTableModel */ public AddChangeTableModel(List<String> cols, List<Data> values, Area area, int id) { this.area = area; this.cols = cols; this.values = values; this.values2 = values; this.id = id; init(); } private void init() { Map<String, String> row = null; if (id != 0) { row = DataAccess.getRow(area, id); // values und values2 beide leer for (Data data : values) { data.setData(row.get(data.getDbField())); } // values und values2 beide mit den selben Werten befüllt... WTF? [...] } } }
eventuell weil values & values2 auf dasselbe objekt verweisen?
Jop, bei mir haperts anscheinend etwas an den Basics...
gibt es einen speziellen grund, weshalb du zwei listen (values und values2) benötigst? der grund, weshalb deine daten redundant sind, befindet sich in zeile 13-14. soll die zweite liste irgend etwas spezielles bezwecken (maybe andere sortierung, ...)?
Das mit der redundanz hab ich schon gelöst, hab das mit den Referenzen irgendwie übersehen/nicht daran gedacht.
Und wegen der zwei Listen:
Die Listen beinhalten Objekte des Typs Data. Data ist ne eigene Java-Klasse die einige Attribute enthält. Bei den meisten Attributen handelt es sich um Metadaten (dbName, displayName, type, ...). Zusätzlich gibt es noch das Attribut data, das den tatsächlichen Wert des Eintrags beinhaltet.
In der Datenbank gibt es zwei Tabellen die ziemlich ähnlich sind (sprich, die Metadaten sind gleich). An den Konstruktor der AddChangeTableModel Klasse wird jetzt eine List<Data> übergeben, wobei in den Data-Objekten nur die Metadaten befüllt sind.
Tja, und in der init()-Methode geh ich dann her und hol mir in Zeile 23 die Werte für die erste Liste aus der Datenbank und befülle dann die data-Attribute der ersten Liste mit den Werten (Zeile 28).
Anschließend passiert das selbe mit der zweiten Liste, nur greif ich dann natürlich auf eine andere Tabelle zu.
ZitatIn der Datenbank gibt es zwei Tabellen die ziemlich ähnlich sind (sprich, die Metadaten sind gleich).
Das mit dem DB-Entwurf ist mir klar. Nur stammt dieser nicht von mir, sondern vom Kunden. Desshalb kann ich auch nicht genau auf das Beispiel eingehen, da hätte er wohl was dagegen. Aber ich versuchs mal allgemein:
TabelleA (1 : n) TabelleB
TabelleA:
ID (pk)
Attr1
Attr2
Attr3
TabelleB:
ID (pk)
TabAID (fk)
Attr1
Attr2
Attr3
In beiden Tabellen befindet sich die gleichen Spalten, nur mit unterschiedlichen Daten. Bei TabelleB wird auch ein Datensatz aus TabelleA angegeben. Das heißt, wenn zb. Attr1 in TabelleB keinen Wert zugewiesen hat, ist der Werte in TabelleA gültig.
Und zwecks Datenbank-Anbindung: Passiert auch über jdbc, der direkte Zugriff befindet sich nur hinter meiner eigengen DataAccess-Klasse. In der Funktion getRow (Zeile 23) wird das ResultSet einfach in eine Map gepackt. Damit kann es mir egal sein wie die Datenbank-Anbindung dahinter ausschaut, weil ich immer eine Map(dbname, value) zurückbekomme.
ok, alles klar. nette lösung. na wenn der kunde das unbedingt so wünscht, sollte man diesem wunsch auch nachkommen. ich kann mich noch erinnern, dass unser prof. damals uns vor solchen situationen gewarnt hat. man solle, wenn der kunde explizit keine normalformen will, eine schriftliche bestätigung einfordern, um auf nummer sicher zu gehen. 
natürlich ist es dennoch möglich, die beiden tabellen konsistent zu halten. nur muss man dann halt selber im java-programm dafür sorgen, dass das auch der fall ist.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026