Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Singleton, syncronized static method, jdbc open / 25 сообщений из 105, страница 1 из 5
18.06.2019, 19:04
    #39827928
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Привет всем!
Подскажите пожалуйста, осваиваю Java+Android studio. Познакомился с замечательным простым паттерном Синглтон, + его использование в асинхронном режиме (важно, потому что запускать буду в onCreate MainActivity в андроид студио. Но тестирую саму работу в IntelIJ ).
Есть небольшой класс вызова Connection и основных методов statement, код, который хорошо отрабатывает:
Код: 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.
import java.sql.*;
import java.sql.DriverManager;
public final class MySqlConnect {

    public Connection conn;
    private Statement statement;
    public static MySqlConnect db;
    private MySqlConnect() {
        String url= "jdbc:mysql://localhost:3306/";
        String dbName = "test_db?serverTimezone=Europe/Moscow";
        String driver = "com.mysql.cj.jdbc.Driver";
        String userName = "test_user";
        String password = "test_password";
        try {
            Class.forName(driver);
            this.conn =DriverManager.getConnection(url+dbName,userName,password);
        }
        catch (Exception sqle) {
            sqle.printStackTrace();
        }
    }
    public static synchronized MySqlConnect getDbCon() {
        if ( db == null ) {
            db = new MySqlConnect();
        }
        return db;
    }
    public ResultSet query(String query) throws SQLException{
        statement = db.conn.createStatement();
        ResultSet res = statement.executeQuery(query);
        return res;
    }

    public int insert(String insertQuery) throws SQLException {
        statement = db.conn.createStatement();
        int result = statement.executeUpdate(insertQuery);
        return result;
    }
}


Как вы видите , используется статичный асинхронный метод передачи url в строку подключения из конструктора.

Подскажите пожалуйста, есть ли возможность передать в статичный конструктор/метод пару текстовых переменных. (логин и пароль к примеру, один раз). И если да, то как?

И второй вопрос : в main тестирую возможность выборки простым способом:
Код: java
1.
System.out.print("Возможность выборки из базы: " + !(MySqlConnect.getDbCon().query("SELECT 1").isClosed()));


Если база выключена выпадает куча эксепшенов. Подскажите пожалуйста. Как обработать так, чтобы просто в случае неправильного ввода логина и пароля либо отсутствия подключения выдавало true /false в консоли.
...
Рейтинг: 0 / 0
18.06.2019, 19:14
    #39827937
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей ЛаловAndroid studio.это надо тему в ветку по андроид.
Чтобы не писать велосипедов.
Какая версия андроид?
Сергей ЛаловНо тестирую саму работу в IntelIJ ).надо сразу писать в студии андроида.
...
Рейтинг: 0 / 0
18.06.2019, 19:28
    #39827940
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC SharpСергей ЛаловAndroid studio.это надо тему в ветку по андроид.
Чтобы не писать велосипедов.
Какая версия андроид?
Сергей ЛаловНо тестирую саму работу в IntelIJ ).надо сразу писать в студии андроида.

Да тут вопрос не по андроиду больше, а по тестированию асинхронного соединения и возможности передать переменную в статичный метод.

(в андроиде все работает, только дебаггинг много времени занимает и сборки не любят тестовых методов main внутри кода. Вопрос по Java в первую очередь).

Со вторым вопросом я уже сам разобрался. Остался первый)
...
Рейтинг: 0 / 0
18.06.2019, 20:01
    #39827950
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей Лалов Да тут вопрос не по андроиду больше, а по тестированию асинхронного соединения и возможности передать переменную в статичный метод.
ну а как быть, если ДЛЯ АСИНХРОННОСТИ нужно 2 соединения отдельных или пул коннектов?
А не одно соединение для всех потоков из синглтона?
...
Рейтинг: 0 / 0
18.06.2019, 20:03
    #39827951
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей Лалов вопрос не по андроиду больше
тогда и не пишите про андроид и активити вообще ничего в вопросе.
...
Рейтинг: 0 / 0
18.06.2019, 20:07
    #39827953
asv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
а зачем синглтон если есть рефлексия?
ну тоесть как бы да по шаблонам- но какой смысл если любой вася возьмет твой синглтон и трахнет его столько раз,сколько ему будет нужно?
как по мне инкапсуляция и синглтоны в чатсности -какой то анонизм безсмысленный и беспощадный
...
Рейтинг: 0 / 0
18.06.2019, 20:12
    #39827954
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
asv79,
как бы да. Синглтон счас антипаттерн.
...
Рейтинг: 0 / 0
18.06.2019, 20:13
    #39827956
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
asv79а зачем синглтон если есть рефлексия?
ну тоесть как бы да по шаблонам- но какой смысл если любой вася возьмет твой синглтон и трахнет его столько раз,сколько ему будет нужно?
как по мне инкапсуляция и синглтоны в чатсности -какой то анонизм безсмысленный и беспощадный
затем что рефлексия используется для других целей. а так конечно да. если очень хочется натянуть сову на глобус - у тебя это отлично получится.

по теме ТСа - а в чем проблема просто в метод getDbConn передавать переменные которые следом пробросишь в конструктор? или я не понял вопрос ТСа?
...
Рейтинг: 0 / 0
18.06.2019, 20:14
    #39827957
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей Лалов,
в каждой активити, в конструкторе, поставьте
DriverManager.getConnection(url+dbName,userName,password);
И пусть каждое окошко делает отдельный коннект к базе.
...
Рейтинг: 0 / 0
18.06.2019, 20:15
    #39827958
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
andreykaTпо теме ТСа - а в чем проблема просто в метод getDbConn передавать переменные которые следом пробросишь в конструктор? или я не понял вопрос ТСа?
проблема в архитектуре - зачем синглетон и кто его сегодня пишет?
...
Рейтинг: 0 / 0
18.06.2019, 20:30
    #39827961
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
asv79а зачем синглтон если есть рефлексия?
ну тоесть как бы да по шаблонам- но какой смысл если любой вася возьмет твой синглтон и трахнет его столько раз,сколько ему будет нужно?
как по мне инкапсуляция и синглтоны в чатсности -какой то анонизм безсмысленный и беспощадный
трахают маньку на сеновале. а мы программируем. если ты не понимаешь зачем синглтон то это не означает, что он не нужен. синглтон - это один из стандартных дизайн-паттернов.
...
Рейтинг: 0 / 0
18.06.2019, 20:32
    #39827962
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
andreykaTесли ты не понимаешь зачем синглтон то это не означает, что он не нужен
а тебе не интересно обосновать нужность?
Сам писал "его"? Или статический класс?
...
Рейтинг: 0 / 0
18.06.2019, 20:36
    #39827963
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC SharpandreykaTпо теме ТСа - а в чем проблема просто в метод getDbConn передавать переменные которые следом пробросишь в конструктор? или я не понял вопрос ТСа?
проблема в архитектуре - зачем синглетон и кто его сегодня пишет?
в смысле кто? и где там проблема я чот не понял? суть в том что тебе надо держать в системе не более одного инстанса какого-то конкретного класса. чем это вызвано? ну например, сервис, с которым тебе надо обмениваться данными может поддерживать не более одного подключения, и это подключение осуществляется в написаном тобою объекте. а у тебя приложение без синглтона наплодит их N и всё сломается.
...
Рейтинг: 0 / 0
18.06.2019, 20:36
    #39827964
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC Sharp,

Из всей массы советчиков по топику, вы один по коду непосредственно подсказали. Отдельно вам спасибо. Остальным рассуждальщикам спасибо за фон)
...
Рейтинг: 0 / 0
18.06.2019, 20:38
    #39827965
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC SharpandreykaTесли ты не понимаешь зачем синглтон то это не означает, что он не нужен
а тебе не интересно обосновать нужность?
Сам писал "его"? Или статический класс?
в спринге, синглтон - это дефолтовый бин скоуп например. т.е. ты пометил класс аннотацией сервис, компонент, бин и т.п. без дополнительных уточнений - ты создал синглтон.
...
Рейтинг: 0 / 0
18.06.2019, 20:39
    #39827966
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
andreykaTсуть в том что тебе надо держать в системе не более одного инстанса какого-то конкретного класса. чем это вызвано? ну например, сервис, с которым тебе надо обмениваться данными может поддерживать не более одного подключения, и это подключение осуществляется в написаном тобою объекте. а у тебя приложение без синглтона наплодит их N и всё сломается.
+1
Ну а применительно к коннекту в базу?
...
Рейтинг: 0 / 0
18.06.2019, 20:41
    #39827967
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей ЛаловPetroNotC Sharp,
Из всей массы советчиков по топику, вы один по коду непосредственно подсказали. Отдельно вам спасибо. Остальным рассуждальщикам спасибо за фон)
анализировать чужие ответы в форуме (кто и сколько) не совсем скромно.
Это совет).
...
Рейтинг: 0 / 0
18.06.2019, 20:41
    #39827968
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
Сергей ЛаловPetroNotC Sharp,

Из всей массы советчиков по топику, вы один по коду непосредственно подсказали. Отдельно вам спасибо. Остальным рассуждальщикам спасибо за фон)
жаль что ты не понял и даже не попытался разобраться что там происходит под капотом и почему это сделано именно так, а не иначе.
...
Рейтинг: 0 / 0
18.06.2019, 20:44
    #39827970
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC SharpandreykaTсуть в том что тебе надо держать в системе не более одного инстанса какого-то конкретного класса. чем это вызвано? ну например, сервис, с которым тебе надо обмениваться данными может поддерживать не более одного подключения, и это подключение осуществляется в написаном тобою объекте. а у тебя приложение без синглтона наплодит их N и всё сломается.
+1
Ну а применительно к коннекту в базу?
надо смотреть как это работает. возможно ли при каждом вызове любой крад операции поднимать новый коннект к базе чтоб записать а потом его закрывать, насколько это ресурсозатратно, сколько отжирает времени открытие каждого нового коннекшина, как скоро у тебя пул кончится и т.п.
если ты будешь где попало в коде делать вот это вот: DriverManager.getConnection(url+dbName,userName,password); то будет именно это. плюс еще ты и мешаешь всё в кучу.
...
Рейтинг: 0 / 0
18.06.2019, 20:59
    #39827975
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
andreykaTкак скоро у тебя пул кончится и т.п.ну дак либо пул, либо синглетон.
Так ведь?
Синглетон это один коннект на весь десктоп проект.
А пул коннектов даёт асинхронность.
Поэтому либо в каждую форму коннект (у нас десктоп!), либо пул коннектов.
imho
...
Рейтинг: 0 / 0
18.06.2019, 21:17
    #39827984
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC Sharp,

10 лет на форуме уже, раньше с odbc общался из другого языка. Успешно. Написал несколько полноценных клиент серверное приложений под относительно крупные конторы. Морды на vb в основном. На стороне сервера - ms sql, mysql. В java 2 месяца. Офигенный язык. Курю, осваиваю с малого. Особенно поражает возможность гибко масштабировать структуру взаимодействия классов. В vb конечно для ленивых побольше плюшек)) Пример синглтона взял из сети, сам немного допилил. По вопросу номер 1-поднять соединение с базой как можно быстрей. База одна, соединение одно. И попробовать его заставить работать асинхронно. Jdbc- потому что знаю его собрата сносно. Он само и кэширует и выдает и много чего ещё, почему то молодежь лучше будет писать мотню кода, чем использовать то что есть)
...
Рейтинг: 0 / 0
18.06.2019, 21:29
    #39827988
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
джава старьё. смотри на скалу и котлин. понравятся еще больше. я гарантирую
...
Рейтинг: 0 / 0
18.06.2019, 21:37
    #39827991
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
andreykaTджава старьё. смотри на скалу и котлин. понравятся еще больше. я гарантирую
это ему не зайдёт после бейсика.
И в андроиде больше обычной java чем котлин.
Сергей ЛаловПример синглтона взял из сети, сам немного допилил.
сеть это большая помойка. Надо проверять что берете.
Сергей ЛаловПо вопросу номер 1-поднять соединение с базой как можно быстрей.
ну например 0,1сек при открытии формы. Много? Делайте пул.
...
Рейтинг: 0 / 0
18.06.2019, 21:40
    #39827993
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
PetroNotC SharpandreykaTкак скоро у тебя пул кончится и т.п.ну дак либо пул, либо синглетон.
Так ведь?
Синглетон это один коннект на весь десктоп проект.
А пул коннектов даёт асинхронность.
Поэтому либо в каждую форму коннект (у нас десктоп!), либо пул коннектов.
imho
пул я говорил в контексте базы данных. у нее тоже ограничено количество подключений. не забывай что новый коннекшн это новые ресурсы которые надо утилизировать и тебе и серверу бд. для каждой формы устанавливать отдельный коннекшн к базе может быть и накладно по ресурсам. и я не уверен, что это в контексте бестпрактизов. хотя если у тебя скажем, аш2 и всё локально - то плевать.

но, опять же, возвращаясь к бестпрактизам....
...
Рейтинг: 0 / 0
18.06.2019, 21:41
    #39827994
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Singleton, syncronized static method, jdbc open
в андройде даже гугл всю новую доку делает на котлине и позиционирует его как основной язык для разработки андройд-приложений.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Singleton, syncronized static method, jdbc open / 25 сообщений из 105, страница 1 из 5
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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