JDBC Singleton: финальная переменная соединения с разбором файлов - PullRequest
1 голос
/ 14 января 2012

Да, я знаю .. Я бы не стал делать это с помощью единственного соединения, если бы я не был обязан.

С учетом сказанного, скажем, я хочу создать одноэлементный класс, скажем, DBConnection, с переменной sql Connection, и, скажем, я хочу, чтобы класс загружал информацию из файла о ip базы данных, пользователе и т. Д. Внутри своего конструктора.

Как я могу установить переменную Connection в качестве окончательного статического значения, если мне нужно сначала проанализировать данные из файла, прежде чем присваивать ему значение?

Код до сих пор (игнорируйте отсутствующую синхронизацию в getConnection):

final public class DBConnection {
    transient private static Connection con;

    private DBConnection()

         [parse file, make url]
          con = DriverManager.getConnection(url);
         [...]
    }

    public static Connection getConnection(){
      if (con == null)
         new DBConnection();

    return con;

    }
}

Пожалуйста, также расскажите, есть ли что-то неловкое в классе, по одному. В некотором смысле, может быть, мне все-таки не следует иметь его как окончательный, в случае, если соединение закрывается, и мне нужно создать новый getConnection, но это, вероятно, будет плохой одноэлементный класс, не так ли?

РЕДАКТИРОВАТЬ решил изменить мой подход и сделать его enum way

public enum Connect {  
    INSTANCE;
    private Connection con;
    Connect (){
      [parse file]
       con = DriverManager.getConnection(url);
     [...]
}

public Connection getCon(){
    return con;
}

Однако, как мне убедиться, что никто не пытается

Channel.INSTANCE.getCon

до завершения конструктора?

1 Ответ

0 голосов
/ 14 января 2012

Если вызывается Connect.INSTANCE.getCon(), то должно быть создано перечисление INSTANCE, тогда его конструктор должен быть выполнен раньше.Такой код не может быть выполнен, если конструктор еще не выполнялся.

...