Variablen aus aus XML für Datenbankklasse

ThorstieB

Mitglied
Guten Morgen Forum,

ich habe eine Klasse in der ich den Datenbankzugriff reguliere:

Java:
public class datenbank
{

 String     driver     = "oracle.jdbc.driver.OracleDriver";
 
  // --------------------------------------------------------------------------
  // Jier natürlich keine echten Werte im Forum
  String     host       = "123.456.789.1";            // !!! anpassen !!!
 
  String     port       = "1234";                 // !!! anpassen !!!
 
  String     database   = "datenbank";             // !!! anpassen !!!
 
  String     user       = "USERNAME";                  // !!! anpassen !!!
 
  String     password   = "PASSWORT";                  // !!! anpassen !!!
 
  // --------------------------------------------------------------------------
 
  Connection connection = null;
 
 
  /**
   * Verbindung zur Datenbank schließen
   */
  private void closeConnection ()
  {
    try
    {
      connection.close ();
    }
    catch (SQLException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
 
    //System.out.println ("\nconnection closed");
  }
 
 
 
 
 
  /**
   * @return Url-string für Oracle-database Verbindung
   */
  private String getUrl ()
  {
    // folgende Form wünscht Oracle
    // ================================================
    // "jdbc:oracle:thin:@<hostname>:<port>:<sid>", "<user>", "<password>"
    // user und passwort in funktion Verbindung zur Datenbank
    // 
	 return("jdbc:oracle:thin:@"+host+":"+port+":"+database);
    
  }
  /**
   * Treiber laden
   */
  private void loadJdbcDriver ()
  {
    try
    {
      Class.forName (driver);
    }
    catch (ClassNotFoundException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
  }
 
  /**
   * Verbindung zur Datenbank schließenn
   */
  private void openConnection ()
  {
    try
    {
      connection = DriverManager.getConnection (getUrl (),
                                                user,
                                                password);
    }
    catch (SQLException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
 
    //System.out.println ("connection opened");
  }


Nun wird diese Klasse aber in einem War-Container, weit weg von mir benutzt. Aus diesem Grunde habe ich mir gedacht, ich tue die Parameter (Host, Nutzername, Port etc) in eine XML-Datei damit die Parameter auch ohne Eingriff in den Quellcode angepasst werden können. Das klappt eigentlich auch ganz gut, wenn ich folgende Funktion verwende:



Java:
	private static String parameter (String parametername) throws InvalidPropertiesFormatException, FileNotFoundException, IOException
	{
		String ordnerpfad = simulation.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
		System.out.println(ordnerpfad);
		if(ordnerpfad.contains("projekt/simulation.class"))
		{
			ordnerpfad = ordnerpfad.replace("diasim/sim.class","");
			ordnerpfad = ordnerpfad + "\\datenbank.xml";
			System.out.println(ordnerpfad);
		}
		else
		{
			ordnerpfad = ordnerpfad.replace("/WEB-INF/lib/sim.jar","");
			ordnerpfad = ordnerpfad + "\\datenbank.xml" ;
		}
		Properties properties_datenbank = new Properties();
		properties_datenbank.loadFromXML(new FileInputStream(ordnerpfad + "\\datenbank.xml"));
                return properties_datenbank.getProperty(parametername);
	
	}


Diese Funktion kann ich jetzt in allen Funktionen aufrufen, an den Stellen wo z.B. der Nutzername benötigt wird. Das heißt aber, das ich diese Funktion enorm häufig aufrufen muss.
Daher nun meine Frage kann ich die Funktion so gestallten, das die Werte ähnlich einfach festgelegt werden wie in der oben gezeigten Klasse, nur eben mit den Werten aus der XML?

mfg
Balli
 

maxemann96

Mitglied
Bastel dir doch eine Property Klasse, die einmal geladen wird und danach auch eine Methode zum Abrufen hat, die Daten aber alle schon im Objekt sind
 

c_sidi90

Top Contributor
Klar geht das. Du kannst ein einfaches XML Framework für Java nutzen, schreibst deine XML Datei z.B. folgender Struktur:

Root: Settings
-Connection:
-database
-user
-password


---------------------------------------

Durch diese XML Datei iterierst du dann nach dem Einlesen und weist die Values der Elemente halt deinen Variablen zu.

Hier ein Link dazu:

Reading XML Documents with JDOM
 

ThorstieB

Mitglied
Hi,
vielen Dank für eure Antworten. Das mit dem JDom klingt interessant und werde ich mir die Tage mal genauer anschauen.
@maxemann96 deine Antwort habe ich leider nicht wirklich verstanden. Magst du das eventuell einwenig genauer erklären?
mfg
Thorsten
 

2AndAHalfBit

Aktives Mitglied
Möglichkeit 1 wurde schong genannt.
Möglichkeit 2 Du kannst Dein ganzes Objekt auch Serialisieren (ObjectInputStream, ObjectOutputstream). So kannst Du Dein Objekt auch in einer XML Datei speichern.

Aber Vorsicht!!!

Du machst Kennwörter im Klartext sichtbar.
Die liegen dann irgendwo auf einer Platte und sind sichtbar und zugänglich.
Das ist ganz schlecht.

Wenn Du so etwas machst, verwende doch wenigstens eine Verschlüsselung, damit es nicht ganz so offensichtlich ist. Oder Du rückst von Deiner XML Datei ab, und verwendest das CallbackPattern, um das Passwort von der jeweiligen App abzufragen...

Grüße
 

ThorstieB

Mitglied
Möglichkeit 1 verstehe ich eventuell noch nicht richtig*G*

Das mit dem Passwort und dem Klartext ist kein Problem, denn das Programm liegt bei unserem Administrator in sicheren Händen und ausser ihm kann niemand auf die Festplatte zugreifen. Aber er hat eben keine Lust (voll verständliche) im Quelltext Änderungen vorzunehmen, wenn das erforderlich ist.

mfg
Thorsten
 

ThorstieB

Mitglied
Also eine XML Datei eingelesen bekomme ich ja ohne Probleme, ich kann die auch den entsprechenden Variablen zuordnen, nur eben nicht wenn die Variable ausserhalb einer Methode/Funktion in einer Klasse definiert ist.
 

ThorstieB

Mitglied
Ich glaube weil ich mich zu dämlich anstelle. Ich generiere mal fix die Fehlermeldung und das ganze so wie ich mir das Vorgestellt habe. Stimmt, das hätte ich bereits posten können, entschuldigung.

Hier also der Code wie ich Ihn getestet habe:

Java:
public class oracle
{
	//Parameter aus datenbank.xml laden
	private String[] Parameter () throws InvalidPropertiesFormatException, FileNotFoundException, IOException
	{
		String ordnerpfad = simulation.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
		System.out.println(ordnerpfad);
		if(ordnerpfad.contains("diasim/simulation.class"))
		{
			ordnerpfad = ordnerpfad.replace("diasim/simulation.class","");
			ordnerpfad = ordnerpfad + "\\datenbank.xml";
			System.out.println(ordnerpfad);
		}
		else
		{
			ordnerpfad = ordnerpfad.replace("/WEB-INF/lib/risiko.jar","");
			ordnerpfad = ordnerpfad + "\\datenbank.xml" ;
		}
		Properties properties_datenbank = new Properties();
		properties_datenbank.loadFromXML(new FileInputStream(ordnerpfad + "\\datenbank.xml"));
		String [] datenbankparameter = new String[5];
		datenbankparameter [0] = properties_datenbank.getProperty("Host");
		datenbankparameter [1] = properties_datenbank.getProperty("Port");
		datenbankparameter [2] = properties_datenbank.getProperty("Database");
		datenbankparameter [3] = properties_datenbank.getProperty("Benutzername");
		datenbankparameter [4] = properties_datenbank.getProperty("Passwort");
		return (datenbankparameter);
	}
	
  String datenbankparameter [] = Parameter();	//HIER KOMMT DER FEHLER
	
	
	
  String     driver     = "oracle.jdbc.driver.OracleDriver";
 
  // --------------------------------------------------------------------------
 
  String     host       = "123.456.789.1";            // !!! anpassen !!! datenbankparameter[0]
 
  String     port       = "1234";                 // !!! anpassen !!! datenbankparameter[1]
 
  String     database   = "db";             // !!! anpassen !!! datenbankparameter[2]
 
  String     user       = "username";                  // !!! anpassen !!! datenbankparameter[3]
 
  String     password   = "pw";                  // !!! anpassen !!! datenbankparameter[4]
 
  // --------------------------------------------------------------------------
 
  Connection connection = null;
 
 
  /**
   * Verbindung zur Datenbank schließen
   */
  private void closeConnection ()
  {
    try
    {
      connection.close ();
    }
    catch (SQLException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
 
    //System.out.println ("\nconnection closed");
  }
 /**
   * @return Url-string für Oracle-database Verbindung
   */
  private String getUrl ()
  {
    // folgende Form wünscht Oracle
    // ================================================
    // "jdbc:oracle:thin:@<hostname>:<port>:<sid>", "<user>", "<password>"
    // user und passwort in funktion Verbindung zur Datenbank
    // 
	 return("jdbc:oracle:thin:@"+host+":"+port+":"+database);
    
  }
  /**
   * Treiber laden
   */
  private void loadJdbcDriver ()
  {
    try
    {
      Class.forName (driver);
    }
    catch (ClassNotFoundException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
  }
 
  /**
   * Verbindung zur Datenbank schließenn
   */
  private void openConnection ()
  {
    try
    {
      connection = DriverManager.getConnection (getUrl (), user, password);
    }
    catch (SQLException e)
    {
      e.printStackTrace ();
      System.exit (1);
    }
 
    //System.out.println ("connection opened");
  }

Als Fehler wird mir gesagt:
Code:
Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor

Ich denke es liegt daran das ich mit einer Methode die einer Klasse gehört die Klassenvariablen festlegen möchte, kann das sein?

mfg
Thorsten und danke für die Hilfe
 
Zuletzt bearbeitet:

maxemann96

Mitglied
Sowas meinte ich zum Beispiel:

Java:
package de.max96.help;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class PropertyLoader
{
	private Properties properties_datenbank;
	
	private static Properties loadProperties() throws InvalidPropertiesFormatException, FileNotFoundException, IOException
    {
        String ordnerpfad = simulation.class.getProtectionDomain().getCodeSource().getLocation().getPath() ;
        System.out.println(ordnerpfad);
        if(ordnerpfad.contains("projekt/simulation.class"))
        {
            ordnerpfad = ordnerpfad.replace("diasim/sim.class","");
            ordnerpfad = ordnerpfad + "\\datenbank.xml";
            System.out.println(ordnerpfad);
        }
        else
        {
            ordnerpfad = ordnerpfad.replace("/WEB-INF/lib/sim.jar","");
            ordnerpfad = ordnerpfad + "\\datenbank.xml" ;
        }
        Properties properties_datenbank = new Properties();
        properties_datenbank.loadFromXML(new FileInputStream(ordnerpfad + "\\datenbank.xml"));
        return properties_datenbank;        
    
    }
	
	public String getParameter(String parameterName) throws InvalidPropertiesFormatException, FileNotFoundException, IOException
	{
		if(properties_datenbank == null)
			properties_datenbank = loadProperties();
		return properties_datenbank.getProperty(parameterName);
	}
}

So werden die Propertys nur einmal reingeladen und können an jeder Stelle des Programms benutzt werden
 

ThorstieB

Mitglied
Heho, ja genauso etwas suche ich!Ich danke dir. Mensch darauf hätte ich auch kommen können, kam ich aber nicht drum danke ich dir(euch) umso mehr.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
S Input/Output Datei für Speicherung von Variablen Java Basics - Anfänger-Themen 5
A Was ist performanter für Konstanten, enum oder static variablen Java Basics - Anfänger-Themen 5
A Variablen für einen Thread anlegen Java Basics - Anfänger-Themen 5
O Kann ich für Array-Namen Variablen verwenden? Java Basics - Anfänger-Themen 2
C Variablen für Operatoren Java Basics - Anfänger-Themen 3
J Variablen-Werte ändern sich nicht... wieso?? Java Basics - Anfänger-Themen 4
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben