Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Datenbankverbindung prüfen

  1. #1
    Registrierter Benutzer
    Registriert seit
    01.12.2006
    Beiträge
    32

    Datenbankverbindung prüfen

    Hallo,

    heute habe ich mal kein Problem, sondern ich möchte meine Lösung vorstellen und ggf. zur Diskussion stellen. Vielleicht kann man es ja besser lösen.

    Bevor ich nun zum eigentliche Thema komme, noch den Hinweis, ich verwende Hibernate.

    Ich habe eine Loginseite. Wenn der Benutzer die Loginseite aufruft, soll angezeigt werden, ob die Verbindung mit der der notwendigen Datenbank möglich ist. Dazu habe ich folgende Klasse erstellt:

    Code:
    public class HibernateUtil {
    	private static org.apache.log4j.Logger log=Logger.getLogger("HibernateUtil.class");
    	private static final SessionFactory sessionFactory;
    	static{
    		try{
    			//cfg.addAnnotatedClass(model.Noten.class);
    			sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
    			//sessionFactory=new Configuration().configure().buildSessionFactory();
    			log.info("noten;SessionFactory erstellt");
    		}catch(Throwable ex){
    			log.error("noten;Initial SessionFactory creation failed."+ ex);
    			throw new ExceptionInInitializerError(ex);
    		}
    	}
    	public static SessionFactory getSessionFactory(){
    		return sessionFactory;
    	}
    In der Datei hibernate.cfg.xml habe ich den Datenbankuser und das Passwort eingetragen.

    Im Loginscript rufe ich folgende Funktion auf:

    Code:
    		public String checkDatabaseConnection(){
    		SessionFactory sf=HibernateUtil.getSessionFactory();
    		String connected="";
    		try{
    			Session s=sf.openSession();
    			s.beginTransaction();
    			connected="database_connected";
    			s.close();
    		}catch(Exception e){
    			connected="database_not_connected";
    		}
    		return connected;
    	}
    Zuerst wird über HibernateUtil eine SessionFactory erstellt. Anschließen wird eine Session geöffnet und es wird versucht ein Transactinobject zu erstellen, da ich es nicht weiter brauche, verwerfe ich den Rückgabewert.
    Wenn das ganze funktioniert, erhält die Variable connected den Wert "database_connected", wenn ein Fehler auftritt wird ihr "database_not_connected" übergeben. Soweit so gut oder vielleicht auch nicht gut, jedenfalls funktioniert das ganze.
    Was mich wundert, ist folgendes: Egal welche Werte ich für den Datenbankuser und Passwort eingebe, eine SessionFactory wird immer erstellt.
    Scheinbar werden die Datenbankbenutzerdaten, aus der hibernate.cfg.xml, immer erst beim Versuch ein Transaction-Object zu erstellen geprüft.

    mfg
    Anunnaki

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2005
    Beiträge
    19
    Hi!
    Scheinbar werden die Datenbankbenutzerdaten, aus der hibernate.cfg.xml, immer erst beim Versuch ein Transaction-Object zu erstellen geprüft.
    Durchaus möglich, ich kenne mich da nicht genau aus, aber ich glaube ich hab diesen EWffekt auch schon mal beobachtet...

    BTW: Du solltest den Status nicht als String darstellen. Erstmal ist ein Stringvergleich unschön im COde zu schreiben:
    Code:
    (if connected.equals("database_connected") {
    //DO WHAT YOU WANT
    und 2. dauert das sehr lange (klar, ist erst mal nicht relevant, aber es geht ums Prinzip

    Stattdessen solltest du vielleicht für jeden Status eine int Konstante in der HinbernateUtil Klasse definieren, z.B. so:

    Code:
    public class HibernateUtil {
    
    public final int DATABASE_NOT_CONNECTED = 0;
    public final int DATABASE_CONNECTED = 1;
    [...]
    int connect = Hibernate.DATABASE_NOT_CONNECTED;
    [...]
    //if Zugriff erfolgreich
    connected = HibernateUtil.DATABASE_CONNECTED
    Aber das sind Feinheiten

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    (OT: Oder ein enum statt int Konstanten, falls es die Java Version zulässt)
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  4. #4
    Registrierter Benutzer
    Registriert seit
    01.12.2006
    Beiträge
    32
    Hallo mehlvogel,

    danke für den Hinweis. Auf die Idee Konstanten zu verwenden, wäre ich so schnell nicht gekommen.

    mfg
    Anunnaki

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •