Uuudelellieee!
Warum die Methoden nicht im Interface vorgeschrieben wurden weiß ich jetzt. Es gibt so etwas wie eine Naming and Directory (JNDI) API. Damit kann man wohl einen Service / Dienst bereitstellen, der die zur Verbindungsherstellung notwendigen Daten bereitstellt.
Wenn ein Client sich nun bei der Datenbank anmelden möchte, muss man nur noch diese Daten beim Service erfragen und kann daraus direkt eine DataSource erstellen.
Das hat den Vorteil, dass man bei Änderung der Datenbank nicht jeden Client anfassen, sondern die Änderungen nur in den Daten vornehmen muss, die durch den Service angeboten werden.
Egal, mir war das mit der protected Methode wichtig.
Hier nochmal für MySQL mit gültiger Connection, nur damit die ganze Sache abgerundet wird:
Aber das mit dem Service will ich jetzt auch nochmal ausprobieren .
Warum die Methoden nicht im Interface vorgeschrieben wurden weiß ich jetzt. Es gibt so etwas wie eine Naming and Directory (JNDI) API. Damit kann man wohl einen Service / Dienst bereitstellen, der die zur Verbindungsherstellung notwendigen Daten bereitstellt.
Wenn ein Client sich nun bei der Datenbank anmelden möchte, muss man nur noch diese Daten beim Service erfragen und kann daraus direkt eine DataSource erstellen.
Code:
InitialContext ctx = new InitialContext();
DataSource s = (DataSource) ctx.lookup("jdbc/ServiceName");
Connection con = s.getConnection( user, pass );
Das hat den Vorteil, dass man bei Änderung der Datenbank nicht jeden Client anfassen, sondern die Änderungen nur in den Daten vornehmen muss, die durch den Service angeboten werden.
Egal, mir war das mit der protected Methode wichtig.
Hier nochmal für MySQL mit gültiger Connection, nur damit die ganze Sache abgerundet wird:
Code:
public static void main(String[] args) throws InstantiationException, ClassNotFoundException, java.net.MalformedURLException, IllegalAccessException, java.sql.SQLException {
java.net.URL p = new java.net.URL("file:\\C:\\Programme\\MySQL\\MySQL Tools for 5.0\\java\\lib\\mysql-connector-java-5.0.4-bin.jar");
URLClassLoader loader = new URLClassLoader(new java.net.URL[]{p}, Thread.currentThread().getContextClassLoader() );
DataSource ds = (DataSource) loader.loadClass("com.mysql.jdbc.jdbc2.optional.MysqlDataSource").newInstance();
try{
Method meth = ds.getClass().getDeclaredMethod("setUser", new Class[]{ String.class });
meth.invoke(ds, new Object[] { "AAAA" });
meth = ds.getClass().getDeclaredMethod("setPort", new Class[]{ int.class });
meth.invoke(ds, new Object[] { 3306 });
meth = ds.getClass().getDeclaredMethod("setPassword", new Class[]{ String.class });
meth.invoke(ds, new Object[] { "AAAAAA" });
meth = ds.getClass().getDeclaredMethod("setServerName", new Class[]{ String.class });
meth.invoke(ds, new Object[] { "localhost" });
java.sql.Connection con = ds.getConnection();
System.out.println( con.isValid(10) );
}catch( NoSuchMethodException ex ){
System.out.println("Methode nicht gefunden " + ex.getMessage());
}catch( InvocationTargetException ex ){
System.out.println(ex.getMessage());
}
}
Aber das mit dem Service will ich jetzt auch nochmal ausprobieren .
Zuletzt bearbeitet: