powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод Null из БД
25 сообщений из 185, страница 6 из 8
Вывод Null из БД
    #39752965
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingВ запросе с coalesce не будет стрингов?coalesce вернёт то что требуется.
если у тебя текстовое поле то обычно делают coalesce (поле,"")

К сожалению, нет.
В некоторых СУБД пустая строка эквивалентна null.

Но мое IMHO, что с БД надо работать с помощью какого-то фреймворка. ResultSet + JSP + pure HTML - как-то совсем сурово (((

Столько мелочей о которых можно забыть: и null, и не забывать вызывать close (try..finally) и пр.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752971
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяк примеру при получении данных из селекта хибер сначала заполняет лист, и только потом отдает его на использование. а зачем? когда можно напрямую использовать данные из селекта. это и затраты на память и на время. ладно когда с 10 записей, а когда 1000?.

страшную вещь тебе скажу, resultset`ы - тоже выбирают все данные в память и оттуда с ней работают. Только никому не говори.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752973
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятут нет неприязни, тут есть наблюдение, когда прошёл жизненную школу по работе с базами, очень видно - что не так делается. Очень противно, когда своё незнание в предмете скрывается за громкими словами...
.

Ты реально думаешь, что кто то тут не умеет сделать в бд вьюху или не умеет использовать native query? Просто интересно.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752980
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинстрашную вещь тебе скажу, resultset`ы - тоже выбирают все данные в память и оттуда с ней работают. Только никому не говори.не совсем так. у субд есть ключи какой объём данных они возвращают через буфер. и заполняют его по мере чтения из него.
поэтому находясь в начале результсета невозможно узнать количество записей.
как только дошел до конца результсета - все данные в памяти, а если ты их использовал -незачем хранить.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752982
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинТы реально думаешь, что кто то тут не умеет сделать в бд вьюху или не умеет использовать native query? Просто интересно.в том то и дело что то что тут делают это поверхностное использование возможностей субд.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752985
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяОзверинстрашную вещь тебе скажу, resultset`ы - тоже выбирают все данные в память и оттуда с ней работают. Только никому не говори.не совсем так. у субд есть ключи какой объём данных они возвращают через буфер. и заполняют его по мере чтения из него.
поэтому находясь в начале результсета невозможно узнать количество записей.
как только дошел до конца результсета - все данные в памяти, а если ты их использовал -незачем хранить.

совсем не так. Это поведение НЕ по умолчанию.
Пример: документация postgresql jdbc

авторBy default the driver collects all the results for the query at once. This can be inconvenient for large data sets so the JDBC driver provides a means of basing a ResultSet on a database cursor and only fetching a small number of rows.

А дальше ряд ограничений на работу с курсором, сомневаюсь, о которых ты читал вообще.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39752987
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяОзверинТы реально думаешь, что кто то тут не умеет сделать в бд вьюху или не умеет использовать native query? Просто интересно.в том то и дело что то что тут делают это поверхностное использование возможностей субд.

в том то и дело, что это подфорум для java программистов, а проблема заключается в том, что ты пока еще ни одним своим постом не продемонстрировал какое-либо глубокое понимание основ работы с бд, но свое презрение успел выразить. При этом твой уровень знаний как java, так бд - пока еще под большим вопросом.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753000
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпотому что java - это байткод, а coalesce - это машинный код.
опять мантры про байт код.
вадядаже если использовать
Код: java
1.
...rs.getString(4)==null?"":rs.getString(4)


всё равно двойное обращение к rs.getString(4)...

уже лучше
Код: java
1.
2.
..String val = rs.getString(4);
..val = val == null ? ""  val;



вадяcoalesce вернёт то что требуется.
rs.getString создаст строку, но разве если в запросе есть coalesce то rs.getString(4) не понадобиться ? Можете пример привести без rs.getString(4) ?


Как это фраза соотносится с производительностью. Если используется coalesce в запросе то rs.getString(4) будет работать по другому ежели в запросе этой функции нет ? Напоминаю вашу претензию, проблемы с производительность из за rs.getString в цикле, что этот вызов будет создавать строку, т..е если используем coalesce то rs.getString перестанет создавать строку?, или rs.getString вообще не понадобится ?


Я обращал внимание что в случае coalesce, в связи с универсальностью этой фукнции, инструкций для вычисления результа будет больше на уровне бд. Если это не видно значит этого нет ? Если для Вас это не наглядно то можно посмотреть код postgres.


вадятут нет неприязни, тут есть наблюдение, когда прошёл жизненную школу по работе с базами, очень видно - что не так делается. Очень противно, когда своё незнание в предмете скрывается за громкими словами... Когда настаивают на преимуществах хибера, не представляя что он делает. К примеру при получении данных из селекта хибер сначала заполняет лист, и только потом отдает его на использование. а зачем? когда можно напрямую использовать данные из селекта. это и затраты на память и на время. ладно когда с 10 записей, а когда 1000?
А можно вообще jvm в процессе postgres в одном адресном пространстве запустить и сразу после чтения с диска передавать указатель на то куда все считалось, еще будет быстрее. Зачем заполнять всякие буферы, передавать кудато, сериализовать туда и обратно ну зачем. На деле же все проще, требуется отдать пользователю за 100мс, какая разница hibernate там или чистый jdbc.


вадясистема должна работать быстро. это основное.
программист должен уметь написать так чтоб работающий быстро код был доступен для лёгкого понимания, и он должен понимать любой код. а писать код с ориентацией на слабых сопровождающих - шаг в пропасть.

Вот если ко все машинам основное требование было ездить быстро, страшно было бы на дорогу выйти. Бесконечно быстро это бесконечно дорого. Тут опять треугольник надежно, быстро приемлемо по затратам, треугольник крутите туда куда надо.

Опять же основная претенция на категоричность фразы в "БД быстрее наитивнее оптимизированней"
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753008
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинвадяпропущено...
не совсем так. у субд есть ключи какой объём данных они возвращают через буфер. и заполняют его по мере чтения из него.
поэтому находясь в начале результсета невозможно узнать количество записей.
как только дошел до конца результсета - все данные в памяти, а если ты их использовал -незачем хранить.

боюсь вы даже про разные кэши ведете речь, у вади кэши субд, а у вас кэши в jdbc драйвере.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753009
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинв том то и дело, что это подфорум для java программистов, а проблема заключается в том, что ты пока еще ни одним своим постом не продемонстрировал какое-либо глубокое понимание основ работы с бд, но свое презрение успел выразить. При этом твой уровень знаний как java, так бд - пока еще под большим вопросом.
когда ответить нечего начинаются личностные нападки....

если б загружались все данные - то количество записей резульсета было бы известно сразу.


ОзверинА дальше ряд ограничений на работу с курсором, сомневаюсь, о которых ты читал вообще.ну очень хорошо, что ты об этом знаешь....
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753016
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя...
если б загружались все данные - то количество записей резульсета было бы известно сразу.
...

Известны кому?
Если не известны Вам, то это не значит, что они вообще не известны ))) Может, кто нибудь знает и помалкивает. Т.к. действительно - раз в __некоторых__ случаях грузятся все данные, то в этих счастилвых случаях, кому-то кол-во записей должно быть известно )))

p.s. тут куча смайликов !!!
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753019
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingбоюсь вы даже про разные кэши ведете речь, у вади кэши субд, а у вас кэши в jdbc драйвере.+1
llemingrs.getString создаст строку, но разве если в запросе есть coalesce то rs.getString(4) не понадобиться ? Можете пример привести без rs.getString(4) ?
coalesce(поле,0) as xx вернёт int
rs.getString("xx") вернёт "0"
rs.getInt("xx") вернёт 0
llemingА можно вообще jvm в процессе postgres в одном адресном пространстве запустить и сразу после чтения с диска передавать указатель на то куда все считалось, еще будет быстрее. Зачем заполнять всякие буферы, передавать кудато, сериализовать туда и обратно ну зачем. На деле же все проще, требуется отдать пользователю за 100мс, какая разница hibernate там или чистый jdbc.что-то всё намешано в кучу
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753020
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevИзвестны кому?
Если не известны Вам, то это не значит, что они вообще не известны ))) Может, кто нибудь знает и помалкивает. Т.к. действительно - раз в __некоторых__ случаях грузятся все данные, то в этих счастилвых случаях, кому-то кол-во записей должно быть известно )))как только получены данные - и указатель находится в начале - нельзя узнать сколько строк в результсете, необходимо "указатель" переместить на последнюю запись только тогда можно узнать количество строк в результсете
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753021
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingВот если ко все машинам основное требование было ездить быстро, страшно было бы на дорогу выйти. Бесконечно быстро это бесконечно дорого. Тут опять треугольник надежно, быстро приемлемо по затратам, треугольник крутите туда куда надо.для конечного пользователя главное чтоб система работала быстро, и ему пофигу что там внутри. вы же пропагандируете - главное чтоб красиво было написано, а как работает - лишь бы работало.
в итоге приходится ждать пока операторы загрузят инфу и слышать : "Подождите, ваши данные загружаются"
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753023
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяrs.getString("xx") вернёт "0"
"0" это же строка создается да еще и в цикле.

Почему
Код: java
1.
String value = rs.getString("xx"); // "0" для запрос select coalesce(xx, "0") as xx from .....


быстрее чем
Код: java
1.
2.
String value = rs.getString("xx"); 
value = value == null ? "0" : value; // "0" для запроса select xx from ....


вадя что-то всё намешано в кучу
ну вам показалось медленно, что не нужна прослойка jpa, можно сразу из resultset данные передавать клиенту. Я описал вариант и выкинуть прослойку resultset и запускать в едином адресном пространстве так будет еще ближе к БД вообще не придется ничего передвать копировать сериализовать, правда так никто не делает. Это правда сильно сложнее будет.

Вы остановились на своем уровне, те кто работает с jpa остановились на своем.

вадяllemingВот если ко все машинам основное требование было ездить быстро, страшно было бы на дорогу выйти. Бесконечно быстро это бесконечно дорого. Тут опять треугольник надежно, быстро приемлемо по затратам, треугольник крутите туда куда надо.для конечного пользователя главное чтоб система работала быстро, и ему пофигу что там внутри. вы же пропагандируете - главное чтоб красиво было написано, а как работает - лишь бы работало.
в итоге приходится ждать пока операторы загрузят инфу и слышать : "Подождите, ваши данные загружаются"

чтож вы все перевираете то
оператору нужно нужно отдать данные в 100мс дальнейнее улучшение бесмысленно. Неважно за 10мс или за 10мкс или 10нс он все равно не заметит.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753024
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingВот если ко все машинам основное требование было ездить быстро, страшно было бы на дорогу выйти. Бесконечно быстро это бесконечно дорого. Тут опять треугольник надежно, быстро приемлемо по затратам, треугольник крутите туда куда надо.для конечного пользователя главное чтоб система работала быстро, и ему пофигу что там внутри. вы же пропагандируете - главное чтоб красиво было написано, а как работает - лишь бы работало.
в итоге приходится ждать пока операторы загрузят инфу и слышать : "Подождите, ваши данные загружаются"

твои ускорялки на скорости системы не отражаются от слова совсем. Но, главное, сделать это как делаешь ты - с важным презрением к тем, кто не якобы не понимает, как работает бд.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753026
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingоператору нужно нужно отдать данные в 100мс дальнейнее улучшение бесмысленно. Неважно за 10мс или за 10мкс или 10нс он все равно не заметит.дело в том что система многопользователькая, и если для одного 100мс не заметно, то при 10 юзерах это будет уже 1 сек....

Озверинтвои ускорялки на скорости системы не отражаются от слова совсем. Но, главное, сделать это как делаешь ты - с важным презрением к тем, кто не якобы не понимает, как работает бд.у меня презрение к тем , кто скрывает своё не понимание субд за громкими словами. выставляя свои минимальные знания как огромные., может с его точки зрения они и видятся таковыми, но на само деле таковыми не являются.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753027
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,ты сам себя презираешь? Ты ж не продемонстрировал пока ничего.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753030
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяLeonid KudryavtsevИзвестны кому?
Если не известны Вам, то это не значит, что они вообще не известны ))) Может, кто нибудь знает и помалкивает. Т.к. действительно - раз в __некоторых__ случаях грузятся все данные, то в этих счастилвых случаях, кому-то кол-во записей должно быть известно )))как только получены данные - и указатель находится в начале - нельзя узнать сколько строк в результсете, необходимо "указатель" переместить на последнюю запись только тогда можно узнать количество строк в результсете

Ссылка была указана на jdbc драйвер postgresql. Есть причины недоверять разрабам драйвере все ли данные сразу в resultset помещаются или нет?

Во первых это поведение не гарантируется все производителями БД. Те кто делал postgres сделал так как сделал. Те кто писал jdbc spec сделал так чтобы можно было расширить. Так в случае Postgresql всего ли частная имплетентация.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753032
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming нельзя узнать сколько строк в результсете
Можно (postygresql), возьми и через reflection дерни. Только решение это не jdbc. И только для конкретного драйвера.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753034
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingСсылка была указана на jdbc драйвер postgresql. Есть причины недоверять разрабам драйвере все ли данные сразу в resultset помещаются или нет?я работал с несколькими субд и во всех так.
проверь - перед первым next сколько строк вернул резульсет
Озверинвадя,ты сам себя презираешь? Ты ж не продемонстрировал пока ничего.показывал, больше не буду
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753036
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingМожно (postygresql), возьми и через reflection дерни. Только решение это не jdbc. И только для конкретного драйвера.хорошее уточнение....
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753037
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingСсылка была указана на jdbc драйвер postgresql. Есть причины недоверять разрабам драйвере все ли данные сразу в resultset помещаются или нет?я работал с несколькими субд и во всех так.
проверь - перед первым next сколько строк вернул резульсет
Озверинвадя,ты сам себя презираешь? Ты ж не продемонстрировал пока ничего.показывал, больше не буду

Перед тем как отписать проверил. Все ок.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753042
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingМожно (postygresql), возьми и через reflection дерни. Только решение это не jdbc. И только для конкретного драйвера.хорошее уточнение....

Еще уточнение, это не гарантируется. Нужно автокомит отключить и настроить тип result set это раз.
Два нет никаких гарантий что через неделю в новом релизе драйвера это поведение поправят в "нужную" сторону.
...
Рейтинг: 0 / 0
Вывод Null из БД
    #39753044
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяllemingСсылка была указана на jdbc драйвер postgresql. Есть причины недоверять разрабам драйвере все ли данные сразу в resultset помещаются или нет?я работал с несколькими субд и во всех так.
проверь - перед первым next сколько строк вернул резульсет


страшную тебе вещь скажу, но java jdbc у connection autocommit по умолчанию = true, а значит всегда данные - открыто соединение к базе и читается пачками или нет - зависит
а) от того, поддерживает ли holdable cursor конкретный jdbc драйвер к базе
б) собственно реализация сценария при чтении данных в резалтсет при коммите.

https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

Cursor Holdability
Calling the method Connection.commit can close the ResultSet objects that have been created during the current transaction. In some cases, however, this may not be the desired behavior. The ResultSet property holdability gives the application control over whether ResultSet objects (cursors) are closed when commit is called.

The following ResultSet constants may be supplied to the Connection methods createStatement, prepareStatement, and prepareCall:

авторHOLD_CURSORS_OVER_COMMIT: ResultSet cursors are not closed; they are holdable: they are held open when the method commit is called. Holdable cursors might be ideal if your application uses mostly read-only ResultSet objects.
CLOSE_CURSORS_AT_COMMIT: ResultSet objects (cursors) are closed when the commit method is called. Closing cursors when this method is called can result in better performance for some applications.
The default cursor holdability varies depending on your DBMS.

Note: Not all JDBC drivers and databases support holdable and non-holdable cursors. The following method, JDBCTutorialUtilities.cursorHoldabilitySupport, outputs the default cursor holdability of ResultSet objects and whether HOLD_CURSORS_OVER_COMMIT and CLOSE_CURSORS_AT_COMMIT are supported:
...
Рейтинг: 0 / 0
25 сообщений из 185, страница 6 из 8
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод Null из БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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