Optymalne połączenie JDBC

0

W jaki sposób napisac klasę odpowiedzialną za połączenie JDBC z bazą danych w najlepszy sposób? Osobiście mam zamiar stworzyć prywatną metodę zwracającą obiekt Connection odpowiedzialną za połączenie, oraz publiczne pole zawierające zwracaną wartość. To jedno pole mam zamiar wykorzystywać we wszystkich moich połączeniach. Czy to dobre rozwiązanie? Przy okazji pytanie: dlaczego w linii ze zmienną POLACZENIE wyskakuje mi błąd o braku złapanych wyjątków?

 package klasySilnika;

import java.sql.*;
import java.io.*;
import java.util.*;
 


public class UstanowPolaczenie 
{
    public static Connection POLACZENIE = UstanowPolaczenie();
   
    private static Connection UstanowPolaczenie() throws IOException, SQLException, ClassNotFoundException
    {
        try 
        {
            Class.forName("org.postgresql.Driver");
        
            Properties props = new Properties();
            FileInputStream in = new FileInputStream("A:/Projekty/Arch/src/klasySilnika/bazaDanych.properties");
            props.load(in);
            in.close();

            String drivers = props.getProperty("jdbc.drivers");
            if(drivers != null) System.setProperty("jdbc.drivers", drivers);
            String url = props.getProperty("jdbc.url");
            String username = props.getProperty("jdbc.username");
            String password = props.getProperty("jdbc.password");

            return DriverManager.getConnection(url, username,password);
        }
        catch (ClassNotFoundException e) 
        {
	return null;
        }
        catch(IOException e)
        {
            return null;
        }  
        catch(SQLException e)
        {
            return null;
        }    
    }
}

Gdzieś spotkałem się z opinią, że lepiej używać ConnectionFactory. Na jakie inne aspekty warto zwrócić uwagę przy pisaniu klasy odpowiedzialnej za połączenie JDBC?

1

Powiedz że robisz sobie teraz jaja. Lekcja na dziś: singleton. Powinieneś mieć prywatne pole, prywatny konstruktor oraz publiczną metodę do pobierania singletona. Poza tym skoro definiujesz że metoda rzuca wyjątki to nie możesz sobie jej wywołać tak jak to zrobiłeś przy deklaracji pola klasy... Swoja drogą nie bardzo rozumiem czemu twierdzisz ze te wyjątki rzucasz skoro ewidentnie wszystkie łapiesz...
Za "ciche" łapanie wyjątków powinni cię wychłostać. Może jednak warto pouczyć się podstaw javy zamiast głowić się nad "optymalnym" połączeniem z bazą danych?

1

Z takim rozwiązanie są dwa problemy:
-nie można tego użyć w wielu wątkach
-jeżeli połączenie zostanie czasowo zerwane, to nie zostanie ponownie otwarte

1 użytkowników online, w tym zalogowanych: 0, gości: 1