Zum Inhalt springen

Singleton-Pattern für Datenbankverbindung


Gast alexC++

Empfohlene Beiträge

Hallo,

habe mal probiert ein Singleton-Pattern für eine Datenbankverbindung zu bauen.

Habe zwar schon mal in Java programmiert, ist aber schon über 2 Jahre her, also bitte Nachsicht mit mir üben ;)

Schauts euch mal an und gibt eure Meinung dazu ab!


public class DatabaseConnection {


	private static Connection instance = getConnection();


	private DatabaseConnection() {}


	public static Connection getInstance() {


             return instance;


        }


	/**

	 * 

	 * @return Connection

	 */

	private static Connection getConnection()  {

		// JDBC-Treiber für die Verbindung

		// zur mySQL-Datenbank laden

		try {

			Class.forName("com.mysql.jdbc.Driver").newInstance();

		} catch (InstantiationException e1) {

			// TODO Auto-generated catch block

			e1.printStackTrace();

		} catch (IllegalAccessException e1) {

			// TODO Auto-generated catch block

			e1.printStackTrace();

		} catch (ClassNotFoundException e1) {

			// TODO Auto-generated catch block

			e1.printStackTrace();

		}


		// Verbindungsoptionen

		String sUser = "root";

		String sPassword = "";

		String sUrl = "jdbc:mysql://localhost:3306/lerndvd";


		// Verbindung aufbauen

		Connection con = null;

		try {

			con = DriverManager.getConnection(sUrl, sUser, sPassword);			

		} catch (SQLException e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

		return con;

	}	

}


Ich wollte die Exceptions eigentlich in den Methoden-Kopf mit "throws" platzieren.

Gibt es da eine gewisse Anzahl die gültig ist?

Er hat nämlich gemeckert.

Gruß

Alex

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hatte in Multi-Threaded-Umgebungen immer Probleme mit einem einfachen Singleton-Pattern.

Deshalb hab ich das immer mit zwei synchronized gemacht.


	private static Connection instance = null;	

	public static Connection getInstance() {

		synchronized(DatabaseConnection.class) {

			if(instance == null) {

				synchronized(DatabaseConnection.class) {

					if(instance == null){

						instance = getConnection();

					}// 2nd if null

				}// 2nd synchro

			}// 1st if null

		}// 1st synchro

		return instance;

	}

Die Begründung bekomm ich nicht mehr 100%ig zusammen, aber google ist da aussagekräftig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm, klingt eigentlich trivial und einleuchtend. Nur ich kann ich nicht mehr erinnern warum ich das nicht so gemacht hab.

Deinen Link hab ich mir mal angeguckt. Nur das vorletzte (problematische) DoubleChecked...-Beispiel hinkt, da nicht 2mal synchronized, sondern nur zweimal if ( null ). Und das war eben zu wenig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...