Verbindung herstellen

Moin. :smiley:
Bin da grade auf ein Problem gestoßen.
Ich habe verschiedene Objekte die auf eine Datenbankmiddleware zugreifen. Da nun jedesmal die Verbindung zur Datenbank neu herzustellen ist ein bisschen umständlich und zudem auch noch äußerst langsam.
Eleganter wäre es, dass ganze nur einmal zu tun beim Programmstart.
Habe es jetzt erstmal so gelöst, das ich zu Beginn ein Datenbankobjekt anlege und die dbconnect Methode und deren Variablen static gemacht habe. Funktioniert soweit, aber jemand bestimmtes :wink: hat mir gesagt, das sei nicht so super elegant, darum wollte ich mal nach einer besseren Methode fragen.

Gruß,
Soran :o)

Du hast da eigentlich 2 Möglichkeiten

  1. Die Datenbankklasse immer mitreichen
class a{
  private SQLClass sql = new SQLClass();
  public a()
  {
     a.connect();
     new GUI(a);
     ...
  }
}
class b{
  private SQLClass sql;
  public b(SQLClass sql){
    this.sql=sql;
    ...
  }
  private void mach was(){
    sql.hierMachWas();
  }
}

so wäre die eine Lösung, das geht ist nur nicht so schön

  1. Singleton
class SQLClass{
  private Connection con;
  private static SQLClass instance;
  private SQLClass(){}
  public static SQLClass getInstance(){
    if(instance==null)
      instance = new SQLClass();
    return instance;
  }
  public void connect(){
    con = new connection //das stimmt so nicht aber du weißt ja was du machen musst
  }
}

und jetzt machst du nur in deiner Hauptklasse damit die Verbindung steht

class Main{
  private SQLClass sql;
  public Main(){
    sql = SQLClass.getInstance();
    sql.connect();
  }
}

und wenn du es jetzt mal brauchs einfach

class a(){
  private SQLClass sql = SQLClass.getInstance();
  public a(){
  }
  private void machWas(){
    sql.buh();
  }

durch die getInstance Methode bekommst du ja immer das gleiche Objekt und so hast auch immer die gleiche Methode

ich wuerde noch einen schritt weiter gehen und in der Datenbankmanagerklasse die komplette Logik reinstecken, d.h. die Klassen manipulieren an der datenbankverbindung gar nichts sondern schicken einfach ihre Anfragen and die DBManagerklasse

public class Whatever {
  public void doWhatever() {
     DBManagager manager = DBManager.getInstance();
     manager.updateDB("UPDATE what.....");
 }
}

somit wuerde man es im idealfall schaffen das komplette handlung der DB nur in der ManagerKlasse ablaufen zu lassen

ja das macht er ja schon soweit ich weiß und meine SQL Klasse hat ja nur das connect() als Beispiel da können ja noch mehr drin stehn (meine hat derzeit >500 Zeilen ;))

Ich finde es ziemlich doof, wenn ich mich als Benutzer einlogge, ein paar Beiträge schmökere…
…und wenn ich dann einen Beitrag gefunden habe, um dort zu antworten, ich mich schon wieder einloggen muss.
Wieso muss ich zwei mal sagen wer ich bin? So ein Unfug!

muss man eigentlich nicht es gibt glaube einen Timeout von 15min, wenn du dich einlogst (ohne den Haken für immer eingelogt sein) und dann 15min nichts machst fliegst du wieder raus sonst sollte da nichts sein
siehe http://forum.coding-community.net/showthread.php5?t=115

achja sowas kannst du ruhig im offziellen Meckerbereich schreiben :wink:

OK, dann verschiebe ich das mal.

Es hat tatsächlich der Haken gefehlt…
Ich glaube, ich muss wohl doch wieder den „Forum-Opi“ als Benutzerrang einstellen… :wink:

hehe
das andere schmeißt dich nach 15min Inaktivität glaube raus

Hmm kann man das nicht als default machen? Ich glaube sonst, dass viele nicht verstehen werden warum man dort ein Hacken setzen sollte, wenn man sich einlogt.

Wenn ich mich irgendwo einloge, dann will ich als Benutzer so lange wie möglich eingelogt bleiben bis ich mich seber nicht ausloge, ohne irgend ein Hacken zu setzen.

ne geht glaube nicht und viele mögen sowas nicht