Guten Morgen Forum,
ich habe eine Klasse in der ich den Datenbankzugriff reguliere:
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:
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
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