powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC создание и закрытие соединений в отдельном классе
14 сообщений из 39, страница 2 из 2
JDBC создание и закрытие соединений в отдельном классе
    #39238733
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем такой вариант плох:
Singleton
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
package com;

import java.util.logging.Level;
import java.util.logging.Logger;

public class Singleton {

    private static Singleton ourInstance;

    protected static final String BASE = "jdbc:mysql://localhost:3306/tan?characterEncoding=UTF8&useUnicode=true";
    protected static final String BASE_PASSWORD = "1234";
    protected static final String BASE_LOGIN = "root";
    protected static final String CLASS_FORNAME = "com.mysql.jdbc.Driver";

    public static Singleton getOurInstance() {
        if (ourInstance == null) {
            try {
                Class.forName(CLASS_FORNAME).newInstance();
                ourInstance = new Singleton();
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
                Logger.getLogger(Singleton.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return ourInstance;
    }

    public static String getBASE() {
        return BASE;
    }

    public static String getBASE_PASSWORD() {
        return BASE_PASSWORD;
    }

    public static String getBASE_LOGIN() {
        return BASE_LOGIN;
    }

}


где-то в впервых выполняемх классах
Код: java
1.
Singleton.getOurInstance();


и в нужном месте
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 try (Connection con = DriverManager.getConnection(Singleton.getBASE(), Singleton.getBASE_LOGIN(), Singleton.getBase_password());
                CallableStatement proc = con.prepareCall(".........");) {
            rs = proc.executeQuery();
            while (rs.next()) {
                
            }
        } catch (SQLException ex) {
            
        }

...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238739
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имхо, нужно найти для себя коннекшин пул, например HicaryCP и не разводить воды на две страницы :-)
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238746
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа чем такой вариант плох
Смотря как рассматривать этот вариант:
1. Если рассматривать, как конкретный код, то плох хардкоженными настройками подключения.
2. Если рассматривать, как способ реализации синглетона, то тем, что код внутри if'а может выполниться несколько раз, что не очень хорошо в случае, если этот код медленный/дорогой.
3. Если рассматривать, как использование паттерна синглетон, то смотрите посты Blazkowicz, что это не тру, что глобальная видимость и т.д.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238757
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirвадяа чем такой вариант плох
Смотря как рассматривать этот вариант:
1. Если рассматривать, как конкретный код, то плох хардкоженными настройками подключения.
2. Если рассматривать, как способ реализации синглетона, то тем, что код внутри if'а может выполниться несколько раз, что не очень хорошо в случае, если этот код медленный/дорогой.
3. Если рассматривать, как использование паттерна синглетон, то смотрите посты Blazkowicz, что это не тру, что глобальная видимость и т.д.
1. спорное утверждение.
2. почему?
3. чем плоха глобальная видимость?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238758
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
Ну дак пул обезличенный юзер. Все идут под одним логином. Вдруг у ТС не так?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238764
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
1. Пусть так, лично для меня это очевидное утверждение
2. Наверное надо было добавить, что это возможно в многопоточном окружении (а если у вас веб-приложение, то хочешь не хочешь, а она уже есть). Дальше я думаю понятно.
3. Эт уже не ко мне, имхо, ничего особо страшного в этом нет.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238775
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174имхо, нужно найти для себя коннекшин пул, например HicaryCP и не разводить воды на две страницы :-)
Лично у меня совершенно нет доверия HicaryCP после прочтения статьи и комментов Паньгина к ней.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238821
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirЯ вот в упор не вижу здесь наличия состояния, а то что формально это java класс, то в данном случае по сути это не более чем своего рода неймспейс.
Бывает. Статическая инициализация, которую хочет автор, переводит состояние из незарегистрированного драйвера в зарегистрированный. getConnection() переводит из состояния без физических соединений в состояние с соединениями.
Потом автор прочитает про пул и засунет его в этот же класс. Тогда состояние станет более очевидным.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238824
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа чем такой вариант плох:
Не безопасной ленивой инициализацией.

вадяв нужном месте
В каждом месте где там нужен Connection нужно писать такую колбасу со всеми свойствами соединения. Красота.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238830
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя1. спорное утверждение.

Аргументировал.

вадя2. почему?

Почему многопоточность?

вадя3. чем плоха глобальная видимость?
Мы ещё из прошлой темы поняли что SOLID, GRASP и даже KISS для тебя пустые слова. Смысл объяснять что такое сложная система и чем плоха связность внутри неё, если ты отродясь таких систем не видел и не рефакторил?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238836
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir2. Наверное надо было добавить, что это возможно в многопоточном окружении (а если у вас веб-приложение, то хочешь не хочешь, а она уже есть). Дальше я думаю понятно.
Даже для GUI приложения при работе с базой требуется многопоточность, чтобы GUI не блокировать. Так что мне трудно представить ситуацию помимо мелких однодневных проектов где многопоточность вообще не нужна. И уже тем более писать заранее плохой код, только под текущие требования к системе это совсем пагубная практика.


just_vladimir3. Эт уже не ко мне, имхо, ничего особо страшного в этом нет.
Для автора кода ничего страшного нет. Страшно за того человека, который придет после автора и захочет прикрутить пул, для чего ему придется перелопатить код всего проекта. Страшно за проджект менеджера, который увидит коммит в репозиторий на сотни классов, когда банально надо было Connection Pool добавить.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238839
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Ну дак пул обезличенный юзер. Все идут под одним логином. Вдруг у ТС не так?
Не обязательно. Пул нужен даже если у юзера персональная авторизация в БД.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238848
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczjust_vladimirЯ вот в упор не вижу здесь наличия состояния, а то что формально это java класс, то в данном случае по сути это не более чем своего рода неймспейс.
Бывает. Статическая инициализация, которую хочет автор, переводит состояние из незарегистрированного драйвера в зарегистрированный. getConnection() переводит из состояния без физических соединений в состояние с соединениями.
Потом автор прочитает про пул и засунет его в этот же класс. Тогда состояние станет более очевидным.
Если честно, то не очень убедили. Регистрация драйвера согласен, это действительно изменение состояния, но это глобальное состояние и в других реализациях это будет точно так же. Итого по прежнему вижу в этом просто процедурный подход.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238887
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczPetro123Ну дак пул обезличенный юзер. Все идут под одним логином. Вдруг у ТС не так?
Не обязательно. Пул нужен даже если у юзера персональная авторизация в БД.
в обычном случае инфо о юзвере содержится в коннекте СУБД.
Но конечно есть исключения и ухищрения и всякие другие проекты.
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC создание и закрытие соединений в отдельном классе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]