powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC создание и закрытие соединений в отдельном классе
39 сообщений из 39, показаны все 2 страниц
JDBC создание и закрытие соединений в отдельном классе
    #39237810
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу создать класс, который будет загружать драйвер и выдавать соединения с бд, а также закрывать их.
Код: 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.
40.
41.
public class DataSource {
	
	// constructor
	DataSource() throws ClassNotFoundException{
		String driverName = "com.mysql.jdbc.Driver";
		
		try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			System.out.println("Can't load driver!");
			throw e;
		}
	}
	
	public Connection getConnection() throws SQLException{
		
		String url = "jdbc:mysql://localhost:3306/world";
		String password = "password";
		String login = "root";
		
		Connection con = null;		

		try {
			con = DriverManager.getConnection(url, login, password);
		} catch (SQLException e) {
			System.out.println("Error getting connection!");
			throw e;
		} 
		
		return con;
	}
	
	public void closeConnection(Connection con) throws SQLException{
		try {
			con.close();
		} catch (SQLException e) {
			System.out.println("Can't close connection!");
			throw e;
		}
	}
}



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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...

method () {
    Connection con = Datasource.getConnection();
    Statement st = con.createStatement();
    ....
}

...



Пару вопросов:

1). Как сделать то, что я хочу?

2). Правильно ли я понимаю - метод Class.forName(String name); - загружает класс драйвера в память и тот регистрирует себя в DriverManager-е. Драйвер доступен до тех пор пока на него есть ссылка в DriverManager-е?

3). Для работы с базой нам достаточно загрузить один экземпяр класса Driver (все другие загрузки будут избыточными)? Например, у нас будет 2 отдельных класса, которые будут работать с БД и у каждого будет свое соединение, нам же не нужно загружать драйвер дважды?

4). Чем отличается загрузка класса Class.forName(String name); от new Driver();? Class.forname - эта динамическая загрузка (run-time) и мы можем вынести имя драйвера в файл свойств, например, для того чтобы при необходимости сменить драйвер через конфигурацию?

5). Если создать класс со статическим блоком инициализации и поместить туда загрузку драйвера, то он опять же зарегистрируется в DriverManager и будет доступен пока на него есть ссылка (При этом это произойдет только 1 раз ? И в какой момент?)? Если так то в статическом блоке мы же не можем пробросить исключение в случае чего, как быть с этим ?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39237824
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,
посмотри java8, и куча хотелок отпадет за ненадобностью
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39237829
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
достаточно один раз сделать
Class.forName(driverName);

потом, внужном месте
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
try (Connection con = DriverManager.getConnection(Base, Base_login, Base_password);
                CallableStatement proc = ....
            rs = proc.executeQuery();
            rs.next();
            
        } catch (SQLException ex) {
           
        }


всё будет закрыто автоматом
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39237837
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

ИМХО посмотрите в сторону Spring.
Там можно ч/з Spring-JDBC можно работать с JDBC ч\з DI.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39237894
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenХочу создать класс, который будет загружать драйвер и выдавать соединения с бд, а также закрывать их.
Какая от него польза по сравнению с javax.sql.DataSource ?

faustgreenПри этом хочу, чтобы методы были статическими и не нужно было бы создавать экземпляр класса.

Это ущербное желание. Таким образом вы создадите себе методы работы с БД глобальной видимости и будете использовать их в любом классе проекта, совершенно не заботясь о такой ерунде как coupling и cohesion. Почитайте о проблеме глобальных переменных.

faustgreen
Код: java
1.
2.
3.
4.
5.
method () {
    Connection con = Datasource.getConnection();
    Statement st = con.createStatement();
    ....
}


try with resource потерялся. Пользы от того что getConnection() статический - ноль.
Предлагаю проследовать в гугл с вопросом "singleton antipattern"

faustgreen 1). Как сделать то, что я хочу?

У вас уже сделано. В чем вопрос? По-хорошему, конечно, стоило начать и изучение Apache Commons DBUtils, Apache Commons DBCP, Spring JdbcTemplate и других готовых решений.

faustgreen 2). Правильно ли я понимаю - метод Class.forName(String name); - загружает класс драйвера в память и тот регистрирует себя в DriverManager-е. Драйвер доступен до тех пор пока на него есть ссылка в DriverManager-е?

Не совсем. Слово "загружает" здесь не уместно. Класс может быть уже загружен при вызове этого метода. Кстати, спецификация JDBC требует ещё и вызова newInstance(). Так как в древности драйвера регистрировали себя из конструктора. Но в реальном мире они регистрируют себя в статическом инициализаторе, поэтому особой надобности в newInstance() нет.

faustgreen
3). Для работы с базой нам достаточно загрузить один экземпяр класса Driver (все другие загрузки будут избыточными)? Например, у нас будет 2 отдельных класса, которые будут работать с БД и у каждого будет свое соединение, нам же не нужно загружать драйвер дважды?

И вот тут начинается куча недопонимания построенного на заблуждении "загрузить драйвер". JVM грузит один класс только один раз. Вы не можете загрузить класс два раза. Правда, есть нюанс. Один и тот же байт-код загруженый разными ClassLoader-ами считается разными классами с точки зрения JVM.
Про "своё" соединение тут тоже не к месту. Вы три отдельных темы спутали в один процесс.
1. Загрузка класса в JVM это один процесс.
2. Регистрация Driver в DriverManager это другой процесс.
3. Управление содеинениями - это тоже отдельный вопрос.
Эти трое вообще не пересекаются, не надо их смешивать.

faustgreen
4). Чем отличается загрузка класса Class.forName(String name); от new Driver();? Class.forname - эта динамическая загрузка (run-time) и мы можем вынести имя драйвера в файл свойств, например, для того чтобы при необходимости сменить драйвер через конфигурацию?
В Java вся загрузка динамическая (runtime). Но направление мысли верное. Таким образом избегается статическая зависимость от драйвера.

faustgreen
5). Если создать класс со статическим блоком инициализации и поместить туда загрузку драйвера, то он опять же зарегистрируется в DriverManager и будет доступен пока на него есть ссылка (При этом это произойдет только 1 раз ? И в какой момент?)?
Драйвера уже имеют блок статический инициализации. Поэтому разницы особой нет. Это произойдет только один раз сколько бы вы Class.forName() не вызывали. Пока только не удалим драйвер из DriverManager вручную.

faustgreen
Если так то в статическом блоке мы же не можем пробросить исключение в случае чего, как быть с этим ?

Это первый звоночек. Конечно, будет обычный ExceptionInInitializerError. Но вам бы я порекомендовал просто взять за аксиому что статика это зло. Она убивает полиморфизм и даёт глобальную видимость. С одной стороны вы можете просто следовать этому совету. Но с другой стороны, смело делайте статику и тогда вы прочувствуете на собственном опыте все её "прелести". Будет проще понять. Правда, если проект маленький, есть шанс не прочувствовать.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238015
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulfaustgreen,

ИМХО посмотрите в сторону Spring.
Там можно ч/з Spring-JDBC можно работать с JDBC ч\з DI.
в спринг-ЖДБС кстати, коннекшины рулятся непосредственно спрингом. Суть роль программера - это лишь городить запросы и маппинг сущностей. :) Уан стэп ахеад - и мы приходим к хиберу.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238027
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTУан стэп ахеад - и мы приходим к хиберу.
Вообще нет.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238030
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTСуть роль программера - это лишь городить запросы и маппинг сущностей. :) Уан стэп ахеад - и мы приходим к хиберу.
ты пердлагаешь с 1-го по 5-ый класс в школе не посещать и сдать экстерном?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238034
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Это произойдет только один раз сколько бы вы Class.forName() не вызывали. Пока только не удалим драйвер из DriverManager вручную.
Хотя, если разрегать драйвер и вызывать только Class.forName(), то он повторно не зарегается. Статическая инициализация повторно не вызывается. А вот newInstance() может повлиять.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238068
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen, смотри. Здесь читается попытка написать свой менеджер соединений (достаточно general-задачка)
и в то-же время пароли и логины и ip хардкодятся что само по себе противоречит первому пункту.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238230
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПредлагаю проследовать в гугл с вопросом "singleton antipattern"
А есть тынц, где аргументированно раскрывают эту тему? Я вот честно искал (и раньше, и сейчас), находится какое-то невнятное мычание дескать так делать нехорошо, это не #trueoop и т.д. и т.п. Например, есть у меня настройки приложения, я делают синглетон, т.к. хочу быть уверенным в том, что откуда я к ним не обращусь это будут одни и те же настройки, что здесь плохого?
Не говоря о различных перформансных штуках, синглетон не плодит мусор, статик методы прекрасно оптимизируются HotSpot'ом (как минимум безболезненный инлайнинг).
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238295
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirА есть тынц, где аргументированно раскрывают эту тему?

Неа. Давно было. Основных проблем две.
1) Ты никогда не можешь быть уверен что у тебя синглтон всегда таким останется. Вот взять код ТС. Когда у него в ТЗ появится требования обращаться к двум разным БД, то его замечательный код резко станет бесполезным. Либо мы его копипастим для новой БД. Либо рефакторим из синглтона в обычный экземпляр.

2) public static getInstance() метод имеет глобальную видимость. И это побуждает вызывать его не только там где это действительно нужно, а и вообще везде где это можно.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238330
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz1) Ты никогда не можешь быть уверен что у тебя синглтон всегда таким останется. Вот взять код ТС. Когда у него в ТЗ появится требования обращаться к двум разным БД, то его замечательный код резко станет бесполезным. Либо мы его копипастим для новой БД. Либо рефакторим из синглтона в обычный экземпляр.
Эмм... Ну допустим, представил себе такое, тогда появится у него какая-нибудь условно фабрика, которую будем просить - хочу работать с базой 1, хочу работать с базой 2, при этом у нас всего будет 2 инстанса, для каждой БД по своему экземпляру.

Blazkowicz2) public static getInstance() метод имеет глобальную видимость. И это побуждает вызывать его не только там где это действительно нужно, а и вообще везде где это можно.
Ну это звучит в стиле "Дай дураку стеклянныйЗаставь дурака молиться, он и лоб расшибет", что мешает мне через DI прикручивать обращения, там где этого не стоит делать?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238331
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirчто мешает мне через DI прикручивать обращения, там где этого не стоит делать?
Когда у тебя DI, тебе метод getInstance() нафиг не нужен. И твой синглтон легко превращается в не синглтон без всякого рефакторинга. В коде ТС так просто не получится.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238375
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczКогда у тебя DI, тебе метод getInstance() нафиг не нужен. И твой синглтон легко превращается в не синглтон без всякого рефакторинга. В коде ТС так просто не получится.
А в вашей личной практике, на сколько часто меняете синглетон на прототайп у бинов, то есть не проставляете изначально, а так, что жило-было приложение, там был синглетон бин, а потом раз, требования изменились и пришлось поставить прототайп?
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238386
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirА в вашей личной практике, на сколько часто меняете синглетон на прототайп у бинов
При чем тут scope из Spring IoC.
На практике, ситуация, когда сегодня был синглтон, а завтра - уже нет, встречалась не редко. В принципе, на каждом проекте, где разработка занимает больше года.

just_vladimirто есть не проставляете изначально, а так, что жило-было приложение, там был синглетон бин, а потом раз, требования изменились и пришлось поставить прототайп?
Речь вообще не о спринге. Prototype тут вообще не при чем. Нужен был второй экземпляр со своим id. То что у него scope в Spring называется singleton, к проблеме в коде автора никакого отношения не имеет.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238394
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
у ТС вообще нет упоминаний про синглетон, он хочет класс со статическими методами, вполне себе нормальное желание.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238400
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirу ТС вообще нет упоминаний про синглетон, он хочет класс со статическими методами, вполне себе нормальное желание.
Это обычный синглтон, только без полиморфизма. Нормальное желание сделать что-то своё пусть и через жопу.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238424
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andreykaTСуть роль программера - это лишь городить запросы и маппинг сущностей. :) Уан стэп ахеад - и мы приходим к хиберу.
ты пердлагаешь с 1-го по 5-ый класс в школе не посещать и сдать экстерном?
Мне кажется, что особо нет смысл изучать старословянский алфавит перед тем, как перейти к современному :)
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238445
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
))
class = new Class - это не старославянский супротив DI
))
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238459
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за информацию, сейчас все буду разбирать. Пароли жестко прописанные в коде - это временно, для теста.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238569
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczjust_vladimirу ТС вообще нет упоминаний про синглетон, он хочет класс со статическими методами, вполне себе нормальное желание.
Это обычный синглтон, только без полиморфизма. Нормальное желание сделать что-то своё пусть и через жопу.
Звучит как - все что написано в процедурном стиле это синглтон.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238586
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirBlazkowiczпропущено...

Это обычный синглтон, только без полиморфизма. Нормальное желание сделать что-то своё пусть и через жопу.
Звучит как - все что написано в процедурном стиле это синглтон.
Это вообще не процедурный стиль. Тут класс с состоянием под одну роль.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238717
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто вообще не процедурный стиль. Тут класс с состоянием под одну роль.
Я вот в упор не вижу здесь наличия состояния, а то что формально это java класс, то в данном случае по сути это не более чем своего рода неймспейс.
...
Рейтинг: 0 / 0
JDBC создание и закрытие соединений в отдельном классе
    #39238720
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTв спринг-ЖДБС кстати, коннекшины рулятся непосредственно спрингом. Суть роль программера - это лишь городить запросы и маппинг сущностей. :) Уан стэп ахеад - и мы приходим к хиберу.

Вот как раз с точностью до наоборот.
Обычно стараюсь перейти с хибера на JdbcTemplate. :-)
...
Рейтинг: 0 / 0
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
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC создание и закрытие соединений в отдельном классе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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