powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC необязательные параметры
158 сообщений из 158, показаны все 7 страниц
JDBC необязательные параметры
    #39700441
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Кто делал поиск по базе с препарированием по заранее неизвестному количеству полей? Как при этом запрос выглядит и параметры указываются?

Типа есть поле id и name. Юзер может искать по одному из этих полей, а может и по обоим сразу. Как быть в этом случае? 3 текста запроса прописывать - это ж не комильфо
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700445
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcar,
Без параметров. Склейкой строк. Не рекомендуется.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700447
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Korcar,
Без параметров. Склейкой строк. Не рекомендуется.
склейкой строк? ну это же фу ...

а если столбцов поиска 10шт, тогда как? неужели в такой сложной технологии нет простого решения по мультиколоночному поиску?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700457
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarнеужели в такой сложной технологии
что в ней сложного?

Korcarпростого решения по мультиколоночному поиску
и как это должно работать, если правила применения критериев известны только тебе? ну например, что ID нужно искать по условию = , name по ilike '%value%', a personalNumber пo like 'value%'?

я бы не стал заниматься преждевременной оптимизацией - динамический запрос с параметрами скорее всего закроет вопрос. Главное чтобы поиск происходил по индексу, тут уже зависит от возможностей БД. Если у тебя база от такого прогибается, то возможно нужно радикально другое решение.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700458
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В простом случае можно написать под себя генератор SQL-запроса по переданным значениям.
В сложном случае внезапно может получиться MyBatis, поэтому можно сразу попробовать с него.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700483
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар! Сегодня не пятница.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700497
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorcarЮзер может искать по одному из этих полей, а может и по обоим сразу. Как быть в этом случае? 3 текста запроса прописывать - это ж не комильфосредствами sql решается просто.
но для этого надо сформировать sql строку. тут StringBuilder рулит .
один из вариантов для mysql
ввёл юзер :
Код: plaintext
про 65 дло

Код: sql
1.
2.
3.
4.
select поля_ для_вывода from таблица 
where concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%про%' and
concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%65%'
concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%дло%'



по скорости - mysql 5.7.23 - 2 950 000 записей - 1.14сек - любое количество полей
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700503
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя.... like '%65%'

Для Oracle и других серьезных СУБД - говнокод, который:
1) может замусоривать SGA (system global area). В наиболее продвинутых случаях, может даже приводить к эффекту "все стоит колом"
2) т.к. каждый запрос уникальный, будет hard parse. Есть опция позволяющая даже такой говнокод свести в soft parse, но она может вызывать проблемы
и так далее

если можно использовать Bind переменные, их использвать практически __обязательно__. AFAIK
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700506
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в процессе склеевания SQL подсчитать кол-во Bind переменных и потом их вставить - не слишком сложно (хотя код, конечно, получается в 2-а раза длиннее)

3 текста запроса прописывать - это ж не комильфо
Иногда это единственный выход (((. Если от параметров запроса сильно съезжает план выполнения. Для разных наборов приходится делать разные запросы или хинтовать. AFAIK

В принципе, если табличка одна и планы выполнения не важны, то можно всегда передавать все возможные параметры
Типа:
SELECT * FROM table
WHERE
(:param1 is null OR table.field1 = :param1 ) and
(:param2 is null OR table.field2 = :param2 ) and
....
Но этот "легкий" вариант, может намертво угробить план запросов. Т.ч. так лучше не делать.

AFAIK
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700507
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДля Oracle и других серьезных СУБД - говнокод, который:про оракл не отвечаю, а mssql и mysql работает на отлично
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700509
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяStringBuilder рулит
....
про оракл не отвечаю, а mssql и mysql работает на отлично

А как проблемы с безопасностью (SQL Injection) обходишь?
Одного StringBuilder'а явно не достаточно )))
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700511
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый главный пункт забыл )))

говнокод, который:
1) подвержен SQL Injection
2) может замусоривать SGA (system global area). В наиболее продвинутых случаях, может даже приводить к эффекту "все стоит колом"
3) т.к. каждый запрос уникальный, будет hard parse. Есть опция позволяющая даже такой говнокод свести в soft parse, но она может вызывать проблемы
и так далее

если можно использовать Bind переменные, их использвать практически __обязательно__. AFAIK
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700516
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА как проблемы с безопасностью (SQL Injection) обходишь?
Одного StringBuilder'а явно не достаточно )))ожидаемый вопрос :)
я не зря написал
вадяодин из вариантов для mysql
я принципиально использую только хранимки
а в них динамичесий запрос https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html
и ни каких проблем с инъекциями
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700520
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш пример - запрос с литералами. Даже по Вашей ссылке на "Prepared SQL Statement Syntax" первый же пример, создание запроса с биндами.

Клеет запросы и вклеевать туда литералы - плохой стиль. Если можно через Bind - нужно делать через Bind. Кода, конечно, будет больше (практически ровно в 2-а раза)

AFAIK
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700525
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВаш пример - запрос с литералами. Даже по Вашей ссылке на "Prepared SQL Statement Syntax" первый же пример, создание запроса с биндами.по ссылке mysql 8.0, я же указал 5.7.
хоть 8.0 и идёт после 5.7 , но это достаточно большие разницы
и я показал как основу, оптимизация и улучшения - по месту только поощряется
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700531
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я уже давно применяю такое для поиска и отображения найденного после каждого введённого символа, только для ограничения вывода использую limit 5
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700548
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадясредствами sql решается просто.
но для этого надо сформировать sql строку. тут StringBuilder рулит .
один из вариантов для mysql
ввёл юзер :
Код: plaintext
про 65 дло

Код: sql
1.
2.
3.
4.
select поля_ для_вывода from таблица 
where concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%про%' and
concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%65%'
concat_ws(' ', поле_поиска1,поле_поиска2,поле_поискаN) like '%дло%'



по скорости - mysql 5.7.23 - 2 950 000 записей - 1.14сек - любое количество полейа зачем вы так сложно делаете? добавьте новое поле и заполняйте его тригером, тогда concat_ws не нужен будет и вообще залетает все.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700567
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилова зачем вы так сложно делаете? добавьте новое поле и заполняйте его тригером, тогда concat_ws не нужен будет и вообще залетает все.это всё можно и возможно сделать - нужно смотреть по конкретному случаю.
у меня в базе набор товара не достигал и 50 000, поэтому дополнительной оптимизации не требовалось.
счас появилась база в 2,9м - тут и требуется оптимизировать.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700600
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос не имеет отношения к JDBC.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39700611
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mвопрос не имеет отношения к JDBC.
это точно.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701202
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mвопрос не имеет отношения к JDBC.
может в драйверах есть какие-то расширенные функции. там ж куча классов


автор1) подвержен SQL Injection
удалять или дублировать кавычки, если таковые есть в передаваемых параметрах не решат проблему?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701208
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarможет в драйверах есть какие-то расширенные функции. там ж куча классовдля чего?
Склейка строк она и в Африке склейка.
Зайди на ветку СУБД, там тебе тоже самое скажут.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701218
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarудалять или дублировать кавычки, если таковые есть в передаваемых параметрах не решат проблему?много что надо контролировать....
решение проблемы - хранимые процедуры.
Petro123Склейка строк она и в Африке склейка.
единственное - если обрабатывать строки в хранимых процедурах - возможно будет быстрее
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701223
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Korcarможет в драйверах есть какие-то расширенные функции. там ж куча классовдля чего?
Склейка строк она и в Африке склейка.
Зайди на ветку СУБД, там тебе тоже самое скажут.
Заранее мне это не было известно, иначе б не спрашивал.

По факту всё программирование - это строки и можно ляпать их в обычном блокнотике даже без подсветки синтаксиса, но почему-то большинство предпочитают ИДЕ и прочие удобства
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701228
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorcarЗаранее мне это не было известно, иначе б не спрашивал.в том то и дело что это известно заранее - это не параметры запроса , это сам запрос.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701233
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorcarПо факту всё программирование - это строкиты забыл про дезигн тайм и ран тайм)))
Колонки у программистов в стадии проектирования.
Программист?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701234
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
В хранимках тоже моветон.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701251
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Korcar,
Без параметров. Склейкой строк. Не рекомендуется.
Таки динамическое формирование запроса - наиболее правильное решение. Для этого существует масса API: Criteri API, QueryDSL/jOOQ, Apache DdlUtils.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701252
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarсклейкой строк? ну это же фу ...

а если столбцов поиска 10шт, тогда как? неужели в такой сложной технологии нет простого решения по мультиколоночному поиску?
Части запроса типовые. Поэтому хоть 10 колонок, хоть 100. Какая разница?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701309
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В хранимках тоже моветон.???
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701315
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяPetro123В хранимках тоже моветон.???зайди в оракл и спроси, как там к динамическому sql относятся.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701326
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123зайди в оракл и спроси, как там к динамическому sql относятся.
не важно как они там относятся. главное что хранимки защищают от инъекций.
но есть специальные средства и в ms sql и в mysql https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html
которые работают.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701363
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяне важно как они там относятся. главное что хранимки защищают от инъекций.ты это там скажи. Ответят что дилетанту который не видел план запроса это не важно.
Удачи!
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701374
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ты это там скажи. Ответят что дилетанту который не видел план запроса это не важно.
Удачи!будет нужда заняться ораклом...
не чуть не медленнее чем отправлять строку запроса .
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701398
Luchok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarсклейкой строк? ну это же фу ...

а если столбцов поиска 10шт, тогда как? неужели в такой сложной технологии нет простого решения по мультиколоночному поиску?
Части запроса типовые. Поэтому хоть 10 колонок, хоть 100. Какая разница?
ага. условий + полтонны
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701423
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarЗаранее мне это не было известно, иначе б не спрашивал.в том то и дело что это известно заранее - это не параметры запроса , это сам запрос.
та пофиг. сам запрос тоже можно переобработать чем-то до отправки на выполнение
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701424
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LuchokBlazkowiczЧасти запроса типовые. Поэтому хоть 10 колонок, хоть 100. Какая разница?
ага. условий + полтонны
Что хотел сказать-то?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701425
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123KorcarПо факту всё программирование - это строкиты забыл про дезигн тайм и ран тайм)))
Колонки у программистов в стадии проектирования.
Программист?
еще скажи, что в БД таблиц нет, а есть только сущности. мне что-то об этом в универе втирали
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701426
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarсклейкой строк? ну это же фу ...

а если столбцов поиска 10шт, тогда как? неужели в такой сложной технологии нет простого решения по мультиколоночному поиску?
Части запроса типовые. Поэтому хоть 10 колонок, хоть 100. Какая разница?
разница есть в том, куда лучше условия присунуть
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701428
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarразница есть в том, куда лучше условия присунуть
Код условий типовой для всех колонок. Если вы не умеете его переиспользовать, это не значит что само решение плохое.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701461
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarта пофиг. сам запрос тоже можно переобработать чем-то до отправки на выполнение????
запрос - это строка и и её уже не переобработать .

Korcarеще скажи, что в БД таблиц нет, а есть только сущности. мне что-то об этом в универе втиралимогу сказать что таблица - это куча.
Korcarразница есть в том, куда лучше условия присунутьусловия присунуть надо в секцию WHERE строки запроса.
Korcarмне что-то об этом в универе втиралину и научили.....
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701465
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarразница есть в том, куда лучше условия присунуть
Код условий типовой для всех колонок. Если вы не умеете его переиспользовать, это не значит что само решение плохое.
чтоб значит "типовой для всех колонок"? а обработка чисел и строк как же? он ж отличается. для строк надо кавырки проставлять, для чисел нет

зы: не надо тут догадки строить кто и что умеет. тут мемберы разной квалификации. кто-то да что-то всегда не знает. считаешь мой вопрос глупым и не хочешь отвечать по сути. вообще не пиши. какие проблемы?)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701469
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarчтоб значит "типовой для всех колонок"? а обработка чисел и строк как же? он ж отличается. для строк надо кавырки проставлять, для чисел нетне надо так низко опускаться, до элементарного, тут о проблемах спрашивают , а не учат 2+2 решать.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701480
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorcarТипа есть поле id и name. Юзер может искать по одному из этих полей, а может и по обоим сразу. Как быть в этом случае? 3 текста запроса прописывать - это ж не комильфоесли такой вопрос
и нет элементарных знаний работы с базой
поле id - это поле с автоинкрементом индексированное
и искать по обоим полям id и name - это глупость высшей пробы.
либо по id введя полное значение, либо name - like или текстовой поиск.
по обоим сразу - это когда одно поле название товара, а второе название производителя
если у тебя одно поле для вводя у юзера - то надо предварительно оценить что введено - если число - то считаем это id (как пример ввод со сканера штрихкода) , если строка - значить части названия
и тут надо формировать разные запросы .
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701488
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarчтоб значит "типовой для всех колонок"? а обработка чисел и строк как же? он ж отличается. для строк надо кавырки проставлять, для чисел нет
Что за чушь? Ненадо никакие "кавырки" ставить когда есть PreparedStatement.setObject().

Korcarзы: не надо тут догадки строить кто и что умеет. тут мемберы разной квалификации. кто-то да что-то всегда не знает. считаешь мой вопрос глупым и не хочешь отвечать по сути. вообще не пиши. какие проблемы?)
Обидели мышку? Я считаю разлагольствования в стиле "ой, для сотни колонк мне же придётся сто раз скопипастить целую кучу кода" это показатель. Тут никакие "догадки" не нужны. Вы не написали ни строчки кода в этой теме, но уже ноете что будет сложно. Я эту задачу решал раз пять с разными API. И могу заверить что нет никакой сложности. Колонки отличаются только именем и типом. Код для типов иногда может различаться, но это редкость и недоработка API. В итоге вам достаточно списка имён колонок и значений - параметров запроса, чтобы из них собрать динамический запрос не скатываясь в кучу кода.

А если хотите более конкретных советов, то давайте конкретый код. А то, блин, ноют что все ответы говно, а конкретики, как всегда - ноль.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701492
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarчтоб значит "типовой для всех колонок"? а обработка чисел и строк как же? он ж отличается. для строк надо кавырки проставлять, для чисел нетне надо так низко опускаться, до элементарного, тут о проблемах спрашивают , а не учат 2+2 решать.
вся суть вопроса свелась к склейке строк. да это элементарно, не спорю, но суть от этого не меняется
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701497
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarчтоб значит "типовой для всех колонок"? а обработка чисел и строк как же? он ж отличается. для строк надо кавырки проставлять, для чисел нет
Что за чушь? Ненадо никакие "кавырки" ставить когда есть PreparedStatement.setObject().

Korcarзы: не надо тут догадки строить кто и что умеет. тут мемберы разной квалификации. кто-то да что-то всегда не знает. считаешь мой вопрос глупым и не хочешь отвечать по сути. вообще не пиши. какие проблемы?)
Обидели мышку? Я считаю разлагольствования в стиле "ой, для сотни колонк мне же придётся сто раз скопипастить целую кучу кода" это показатель. Тут никакие "догадки" не нужны. Вы не написали ни строчки кода в этой теме, но уже ноете что будет сложно. Я эту задачу решал раз пять с разными API. И могу заверить что нет никакой сложности. Колонки отличаются только именем и типом. Код для типов иногда может различаться, но это редкость и недоработка API. В итоге вам достаточно списка имён колонок и значений - параметров запроса, чтобы из них собрать динамический запрос не скатываясь в кучу кода.

А если хотите более конкретных советов, то давайте конкретый код. А то, блин, ноют что все ответы говно, а конкретики, как всегда - ноль.
а как ты предлагаешь использовать PreparedStatement, когда количество параметров и их положение заранее не известны?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701502
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarа как ты предлагаешь использовать PreparedStatement, когда количество параметров и их положение заранее не известны?
Не знаю что такое "положение параметров". Но никакой проблемы никогда не испытывал с созданием PrepatedStatement из SQL запроса сформированного динамически
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701506
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarа как ты предлагаешь
Весь топик сводиться к препераниям "это же сложно" - "нет это не сложно". Конкретный код когда будем приводить?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701508
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarа как ты предлагаешь использовать PreparedStatement, когда количество параметров и их положение заранее не известны?
Не знаю что такое "положение параметров". Но никакой проблемы никогда не испытывал с созданием PrepatedStatement из SQL запроса сформированного динамически
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701510
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarа как ты предлагаешь использовать PreparedStatement, когда количество параметров и их положение заранее не известны?вот только не надо путать поиск и выборку
по числовым поля не ищут, если ты "суперпрограммист субд" и хочешь искать в по числовому полю - то твоё поле превращается в строку и параметр поиска - тоже строка.
так что всё опять сводится к работе со строками.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701512
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczKorcarа как ты предлагаешь
Весь топик сводиться к препераниям "это же сложно" - "нет это не сложно". Конкретный код когда будем приводить?
Это не сложно. ты не верно понимаешь происходящие события. Это муторно, что не одно и то же)

откуда взяться конкретному коду, если технология его написания как раз еще только обсуждается здесь?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701517
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarоткуда взяться конкретному коду, если технология его написания как раз еще только обсуждается здесь?технологии уже отработаны давно
вопрос выбора для конкретной субд
а ты даже субд не назвал
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701520
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KorcarЭто не сложно. ты не верно понимаешь происходящие события. Это муторно, что не одно и то же)

Муторно писать самому мини-фреймверки и конкатенацию строк? Тогда берешь готовый API. Список я привел первым ответом.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701523
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarоткуда взяться конкретному коду, если технология его написания как раз еще только обсуждается здесь?технологии уже отработаны давно
вопрос выбора для конкретной субд
а ты даже субд не назвал
ms sql
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701536
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701544
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этой компании на одного дурака приходилось десять умных, так что силы
были примерно равны


Korcarкак ты предлагаешь использовать PreparedStatement, когда количество параметров и их положение заранее не известны?вот тебе условный код, чтоб ты уже понял идею, доработать по вкусу:

еще раз код условный, для описания самой идеи. для продуктивного использования не подходит
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
List<Object> paramValues = new ArrayList<>();
StringBuilder sql = new StringBuilder("select * from orders where ")
if (isNotBlank(name))) {
  sql.append("name like ?");
  paramValues.add(name);
}
if (personalNumber != null) {
  sql.append("and personalNumber = ?");
  paramValues.add(personalNumber);
}


//где-то дальше, когда все ненулевые параметры определены, а их порядок нам известен благодаря List
ps = createPreparedStatement(sql.toString());
for (int i = 0; i < paramValues.size(); i++) {
  ps.setObject(i+1, paramValues.get(i));
}


теперь понятно?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701593
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
sql.append("name like '%?%'");
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701601
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя
это понятно, я просто хотел показать идею построения разных запросов в зависимости от типа параметра - для большего этот код все равно не годится по массе причин
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701618
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaЭто понятно, я просто хотел показать идею построения разных запросов в зависимости от типа параметра - для большего этот код все равно не годится по массе причин а вдруг будут к тебе претензии? ведь возник вопрос про кавычки :)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701619
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ
Код: sql
1.
select * from 


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

вадяа вдруг будут к тебе претензии?
сошлюсь на мелкий шрифт ;)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701819
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что надо поиск like a Google?

Тема вроде не так начиналась.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701831
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА что надо поиск like a Google?

Тема вроде не так начиналась.не знаю как для ТС,
но в моей практике - поиск like очень облегчил жизнь менеджерам
и ещё лет 20 назад позволил отказаться от сокращённого названия контрагентов, как это было у 1с...
у меня было 1 поле с полным названием и элементарно ищется...
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701878
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик зашел вникуда. Давайте вернем его в какое-то инженерное русло. Тема гугло-поиска в базах - вызывает
зубной скрежет у DBA. Но давайте уберем за скобки конкретную БД. Допустим по ту сторону интерфейса действительно
стоит генерализованная БД и мы такие типа а вот бы найди в неизвестной бд все таблицы и все записи
где есть строка "blah-blah".

Я предлагаю такой интерфейс.

Код: java
1.
2.
3.
4.
5.
6.
7.
public interface ITextSearchableDatabase {

  void setConnection(Connection conn);

  Iterator<String,Map<String,String>> lookup(String text);

}



Юзкейс такой. Устанавливаем свойство connection.
Ищем lookup("blah-blah"). В результате получаем список документов типа
таблица + список кортежей (строк(сущностей)) где key - название колонки
а value - найденные значения где есть искомое "бла-бла".

Для простоты будем искать только number и varchar поля. Прочие - в игнор.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701890
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Да) Но это не jdbc.
По jdbc мы запрашиваем у АПИ базы перечень таблиц и их полей и тупо перебираем.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701898
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mayton,
Да) Но это не jdbc.
Почему?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701908
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Может я не понял идею, но выше увидел только декларацию интерфейса.
Намерения. Реализацию не увидел.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701910
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТема гугло-поиска в базах - вызывает
зубной скрежет у DBA.насколько я смотрел нагрузки при like - если есть память - нет проблем.
по твоему идём на поводу dba, и городим на java аналог работы субд - в результате система теряет в быстродействии
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701919
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mayton,
Может я не понял идею, но выше увидел только декларацию интерфейса.
Намерения. Реализацию не увидел.
Совершенно верно. Я обсуждаю пока только идею на уровне фасада. Или того угла зрения
под которым на это будут смотреть.

Вам нравится идея?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701922
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Но давайте уберем за скобки конкретную БД. ...
Если в таком ключе, то для IBM Lotus Notes, например, это вполне повседневная обычная задача не вызывающая никаких трудностей. Для CouchDb
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701923
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТема гугло-поиска в базах - вызывает
зубной скрежет у DBA.насколько я смотрел нагрузки при like - если есть память - нет проблем.
по твоему идём на поводу dba, и городим на java аналог работы субд - в результате система теряет в быстродействии

1) Like создает нагрузку класса full-table scan. В нашем кейсе будут профулсканены
100% таблиц и 100% строк во всех таблицах. Долго. Нудно. Возможно придется
подождать пару часиков. Но разве клиента который хочет найти бла-бла это скребёт.
Он говорит - хочу бла-бла. Ждать сколько? Да хоть неделю. Найдите мне бла-бла...

Что за этим скрыто? Номер счета. Физ-лицо. Сумма платежа. Пох.

2) Ничего мы не городим. У нас на вход приходит:
- java.sql.Connection
- "blah-blah"

Я считаю что этих сведений достаточно чтобы найти like a google

Поскипаем скорость. Просто говорим о принципиальной возможности.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701925
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Garrickmayton...Но давайте уберем за скобки конкретную БД. ...
Если в таком ключе, то для IBM Lotus Notes, например, это вполне повседневная обычная задача не вызывающая никаких трудностей. Для CouchDb
Давайте сверх-задачу. Мы не знаем сведений о СУБД.

Но я верю что информации которую поставляет нам DbmsMetadata достаточно чтобы решить задачу в том ракурсе
в котором я нарисовал интерфейс.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DbmsMetadata
DatabaseMetadata
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701936
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701938
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarв общем 4 запроса сделал. надеюсь годно получилось??????
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701954
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonPetro123mayton,
Может я не понял идею, но выше увидел только декларацию интерфейса.
Намерения. Реализацию не увидел.
Совершенно верно. Я обсуждаю пока только идею на уровне фасада. Или того угла зрения
под которым на это будут смотреть.
Вам нравится идея?
Да конечно, для фасада идея здравая и разумная.
Только цели ТС просто поговорить или трёп со смыслом были видны с первым постом).
Удачи!
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701958
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте сверх-задачу. Мы не знаем сведений о СУБД.это будет сразу не оптимально.

mayton1) Like создает нагрузку класса full-table scan.ну фулскан для like не имеет смысла, потому как поиск по like подразумевает не полную информацию о искомом, как правило отдельные части содержимого и порядок вхождения этих частей не известен
поэтому сканировать полностью таблицу нет смысла - вернёт много чего лишнего
следовательно надо ограничиться в приемлемое число возвращаемых записей - супермаксимум 20, реально 5 достаточно
если в найденном нет искомого - добавляем дополнительный like .
запускаем поиск - как правило находим уже с помощью глаз :)
практически - в 28000записях - достаточно 2 like
в 3лямах 3-4
нагрузка на субд практически нулевая- если у вас база в 3ляма записей для оперативной работы, значит и железо будете для этого использовать нормальное, и память не пожалеете. в моём примере 2.9лямов - 660мег на диске, выделяем 5гиг памяти - и поиск like происходит в памяти, без обращения к диску.
по скорости - при 28000 записях - на слабом железе и малой памяти - отображение при вводе каждого символа происходит практически мгновенно .
при 2.9млн - 3like -1.6 сек/ 1like-0.3сек(хорошее железо)нагрузка на проц на заметна по диспетчеру задач...
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701968
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarв общем 4 запроса сделал. надеюсь годно получилось??????
у меня запроса всего 4, а вопросов у тебя аж 6! чего спрашиваешь то? тебе наверное надо умерить аппетиты)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701971
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarу меня запроса всего 4, а вопросов у тебя аж 6! чего спрашиваешь то? тебе наверное надо умерить аппетиты)у меня 1 запрос
как ты насчитал 6?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701976
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonДавайте сверх-задачу. Мы не знаем сведений о СУБД.это будет сразу не оптимально.
Так что. Откажешся кодить?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701989
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТак что. Откажешся кодить?сделаю оптимально.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701991
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпоэтому сканировать полностью таблицу нет смысла - вернёт много чего лишнего
следовательно надо ограничиться в приемлемое число возвращаемых записей - супермаксимум 20, реально 5 достаточно

Почему 20? Почему 5? Если клиент захочет все?

если в найденном нет искомого - добавляем дополнительный like .

Зачем?

Допустим есть табличка T1, с полями F1,F2,F3......

Я сразу пишу

Код: plsql
1.
2.
3.
4.
5.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' OR
F2 LIKE '%blah-blah%' OR
F3 LIKE '%blah-blah%' OR
....


И решаю задачу целиком.

Если оптимизатор выбрал full table scan то ему уже пофиг сколько OR LIKE предикатов будет стоять 1 и сотня.
Тем более что по булевой логике первый сработавший предикат прерывает цепочку сравнений.

запускаем поиск - как правило находим уже с помощью глаз :)

Никаких глаз. Глаза врут. К чорту глаза.

практически - в 28000записях - достаточно 2 like
в 3лямах 3-4

Вообще не понял эту бухгалтерию. Почему 2? Почеу 3 ляма?

при 2.9млн - 3like -1.6 сек/ 1like-0.3сек(хорошее железо)нагрузка на проц на заметна по диспетчеру задач...
(морщится)

При чем здесь это? Что это за метрики? Давайте пока не будем это учитывать. Бесполезная инфа
и к моему предлагаемому интерфейсу не несет никакой пользы.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701992
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТак что. Откажешся кодить?сделаю оптимально.
Сделай. Интерфейс видел? Кодь.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39701999
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяну фулскан для like не имеет смысла
по-моему кто-то кого-то не так понял. когда ты пишешь запрос вида like - бд может быть вынуждена просканировать все записи - это называется full scan
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702004
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвадяну фулскан для like не имеет смысла
по-моему кто-то кого-то не так понял. когда ты пишешь запрос вида like - бд может быть вынуждена просканировать все записи - это называется full scan
Зачем веселье портишь? Я ждал следующих перлов
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702017
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПочему 20? Почему 5? Если клиент захочет все?потому что такой поиск оптимален когда вывод происходит по мере ввода
если данныз не много ~30000, можно начинать поиск с 1 введённого(теоретически - глупо, но проще код, меньше проверок) и соответственно при 1 введённом символе выведет почти всё
при 2 символах чуть меньше.
соответственно первоначально есть смысл ограничить набор найденного,
при наборе 2групп символов (если чел знает что ищет) набор найденного уже 5-10 позиций это при исходных данных в 30000.
это из практических наблюдений.
Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' OR
F2 LIKE '%blah-blah%' OR
F3 LIKE '%blah-blah%' OR


тут ты получишь ахинею
Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' AND
F2 LIKE '%blah-blah%' AND
F3 LIKE '%blah-blah%' AND


так ты получишь искомое
maytonНикаких глаз. Глаза врут. К чорту глаза.
в 5-10 строчках глаз не соврёт - проверено практикой

[quote mayton]Вообще не понял эту бухгалтерию. Почему 2? Почеу 3 ляма?

[quote ]оговорка по Фрейду
реально проверено на таблице в 2 950 000 , поэтому и 2-3 ляма
maytonПри чем здесь это? Что это за метрики? Давайте пока не будем это учитывать. Бесполезная инфа
и к моему предлагаемому интерфейсу не несет никакой пользы.это инфа к сведению
что б было что сравнивать по скорости
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702022
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaпо-моему кто-то кого-то не так понял. когда ты пишешь запрос вида like - бд может быть вынуждена просканировать все записи - это называется full scan если ты ввёл 2 символа и вываливаешь всё что нашёл этот like- этот объём никому не нужен.
поэтому и не смысла делать фулскан, есть смысл остановить его при нахождении 5-10 записей и добавить что выбрано очень много -добавьте критерии для фильтра.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702027
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСделай. Интерфейс видел? Кодь.у меня сделано для веб без всяких интерфейсов :)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702029
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадятут ты получишь ахинею
Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' AND
F2 LIKE '%blah-blah%' AND
F3 LIKE '%blah-blah%' AND


так ты получишь искомое

Ты понимаешь что такое поиск like a Google?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702030
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonСделай. Интерфейс видел? Кодь.у меня сделано для веб без всяких интерфейсов :)
Покеж.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702035
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы понимаешь что такое поиск like a Google?
а ты что хочешь найти?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702038
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпоэтому и не смысла делать фулскан, есть смысл остановить его
Это как? Слезно попросить ДБ?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702039
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПокеж.дай набор данных сделаю демку.

или могу выложть кусок кода который обрабатывает на сервере строку типа ыва ннн вааыв
преобразует её для динамического запроса в хранимке и по ответу строит таблицу для выподающего списка
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702040
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЭто как? Слезно попросить ДБ?не помню как в mssql, но в mysql есть Limit n
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702045
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТы понимаешь что такое поиск like a Google?
а ты что хочешь найти?
Это неважно
Твой второй запрос не будет работать.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702048
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы понимаешь что такое поиск like a Google?для того чтоб найти что-то в одном поле надо так
Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' AND
F1 LIKE '%blah-укh%' AND
F1 LIKE '%blah-bфывlah%' 


что б в нескольких полях

Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
concat(F1,F2,F3) LIKE '%blah-blah%' AND
concat(F1,F2,F3) LIKE '%blah-укh%' AND
concat(F1,F2,F3) LIKE '%blah-bфывlah%' 
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702050
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТвой второй запрос не будет работать.твой найдёт кучу лишнего
ищут то где есть и первый параметр и второй и третий
И , а не ИЛИ
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТы понимаешь что такое поиск like a Google?для того чтоб найти что-то в одном поле надо так
Код: sql
1.
2.
3.
4.
SELECT .... FROM T1 WHERE 
F1 LIKE '%blah-blah%' AND
F1 LIKE '%blah-укh%' AND
F1 LIKE '%blah-bфывlah%' 


Это треш какой-то. Ты даже не представляешь как мне легко опровергать твои тезисы.
Нет честное слово. У тебя было it-образование? Ну ОК. Ладно. Допустим ты - бывший оператор ПК.

Во первых по заданию метод lookup(String text) имеет один аргумент. Это понятно?

Тоесть text="%blah-blah%". И других выражений не будет. Вроде это было очевидно из моего примера.

В таблице могут быть не-текстовые поля. Числовые. Тоесть если я ищу СТРОКОВЫЙ символ
через LIKE в числовом поле. То это всегда FALSE. Тождественный FALSE. Инвариант.

И если F1 - числовое поле (что не запрещено по моему первому тезису) то твой запрос
всегда будет возвращать 0 строк потому что пересечение FALSE и других предикатов даст
тождественный FALSE.

Мне не надо искать примеры с данными. Ферштейн?

А гугло-поиск - это найти что-то везде. Во всех документах и всех полях искомой системы где мы ищем.

Метафора такая. Ну как в текстовом файле. Ферштейн?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702055
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonТвой второй запрос не будет работать.твой найдёт кучу лишнего
ищут то где есть и первый параметр и второй и третий
И , а не ИЛИ
Уже ответил выше.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702061
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonПокеж.дай набор данных сделаю демку.

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

Возьми базу данных NorthWind. Она часто публикуется в тексте. И найди в ней "123".

Но конечно хотелось-бы какое-то общее решение. Не для 1 таблички а для всех.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702078
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ таблице могут быть не-текстовые поля. Числовые. Тоесть если я ищу СТРОКОВЫЙ символ
через LIKE в числовом поле. То это всегда FALSE. Тождественный FALSE. Инвариант.как только дошёл до этого - понял, что с базами ты знаком очень отдалённо.......
на примере mysql
есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE uhtt.xxx (
  ID int(11) DEFAULT NULL,
  UPCEAN bigint(20) DEFAULT NULL,
  Name varchar(255) DEFAULT NULL,
  CategoryID int(11) DEFAULT NULL,
  CategoryName varchar(150) DEFAULT NULL,
  BrandID int(11) DEFAULT NULL,
  BrandName varchar(100) DEFAULT NULL,
  id_ int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  zz blob GENERATED ALWAYS AS (CONCAT_WS(' ', `Name`, `BrandName`)) VIRTUAL,
  PRIMARY KEY (id_)
)
ENGINE = INNODB,
AUTO_INCREMENT = 2925499,
AVG_ROW_LENGTH = 69,
CHARACTER SET utf8,
COLLATE utf8_general_ci;

ALTER TABLE uhtt.xxx
ADD INDEX IDX_xxx_Name (Name);

ALTER TABLE uhtt.xxx
ADD INDEX IDX_xxx_UPCEAN (UPCEAN);


обрати внимание на поле
UPCEAN bigint(20) DEFAULT NULL,
делаю запрос
Код: sql
1.
2.
3.
4.
SELECT
  xxx.UPCEAN
FROM xxx
WHERE  xxx.UPCEAN LIKE '%121042%'


возвращает
"UPCEAN"121042104381210426216122000121042760012104273012104210444921121042006427031210427590512104247826312104221111211210429312104280009431210428001003121042800483312104280049031210428006433274871210425400832121042546060081210424820008121042482011121042854490001210426909756121042
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702082
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяесли ты ввёл 2 символа и вываливаешь всё что нашёл этот like- этот объём никому не нужен.
поэтому и не смысла делать фулскан
блин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702084
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  xxx.UPCEAN,
  xxx.Name
FROM xxx
WHERE CONCAT_WS(' ', xxx.UPCEAN, xxx.Name) LIKE '%121042%'
AND CONCAT_WS(' ', xxx.UPCEAN, xxx.Name) LIKE '%флом%'


вернёт
"UPCEAN""Name"6909756121042"Фломастеры gmv 12шт gw258-12g"
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702087
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaблин вадя, соберись ;) . тебе известно понятие плана запроса? если ты ищешь по полю, на который не существует индекса, то бд будет делать полный перебор записей, что очень неэффективно, если записей много. в данном случае кол-во символов вообще побоку, а limit ничего радикально не решает, потому как нет никаких гарантий, что в очереди из миллиона строк твои 2 нужные не находятся в самом конце списка или где-то посередине с промежутком в 300-400к.
что бы не быть голословным , сделал такой запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
  xxx.UPCEAN,
  xxx.Name
FROM xxx
WHERE xxx.Name LIKE '%9999999s999999%'


такого в поле однозначно нет
да делает фуллл, но время 1.16сек
для сравнения времени можете почитать 21670315
если ты сможешь предложить более оптимальны поиск - я применю
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Ты вообще не читаешь то что я пишу. Я решаю задачу в рамках 1 интерфейса который я предложил.

Ты решаешь другую задачу где есть 2 ключевых слова для поиска.

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

да план запроса - сканирует все строки, но реально , при limit 5 будет намного меньше
и время от 0 до 1.1сек.
если ты сделаешь аналогичное на java - будет на много дольше.
тут был недавно топик, где измеряли скорость - так вот .equals на порядок тормознее чем посимвольное сравнение
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702092
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяда делает фуллл, но время 1.16сек
ну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормоза

вадяесли ты сможешь предложить более оптимальны поиск
я где-то уже выше писал, что по-моему нужно ориентироваться на конкретную задачу при выборе решения. Ну например в postgres (и наверняка много где еще) можно создавать индексы, которыми может воспользоваться движок при поиске по like. Если записей и пользователей совсем жуткое кол-во, а требования по эффективности достаточно строги - могут и сторонние решения понадобится для индексации данных.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702094
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы вообще не читаешь то что я пишу. Я решаю задачу в рамках 1 интерфейса который я предложил.

Ты решаешь другую задачу где есть 2 ключевых слова для поиска.1 ключевое поле для поиска - это бесполезно.
к примеру есть контора, торгующая моющими средствами - там есть разные мылЫ
одного хозяйственного дофига , если использовать для поиска ключевое слово хоз вывалится вес огромный список мыл + ещё куча того что относится к хозяйству...
но достаточно ввести (к примеру ) вес куска 200 - будет список очень маленький - 1-3 строки
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702099
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaну вот, уже сек. что не так уж и мало. умножь кол-во записей на 100, поставь сервер послабее, уменьши памяти и увеличь кол-во пользователей и уже могут начаться жуткие тормозаэтот метод реально работал с 98 года - на том железе
сколько может быть наименований у торгующей конторы? 100 000 ? 200 000?
ежели 3 000 000 - то она спокойно может вложиться в хорошее железо.

да надо ориентироваться на конкретную задачу - я здесь привожу цифры чтоб можно было ориентироваться хоть на что-то
у меня была база в 28 000 наименований товара - и обычное железо - оценить быстродействие было практически не возможно - величины чисел терялись , практически(повторяюсь) данные вывыливались мгновенно, это с учетом того , что был полный цикл от ввода пользователем в браузере - сервер - субд - браузер...
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702104
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarу меня запроса всего 4, а вопросов у тебя аж 6! чего спрашиваешь то? тебе наверное надо умерить аппетиты)у меня 1 запрос
как ты насчитал 6?
вадяKorcarв общем 4 запроса сделал. надеюсь годно получилось??????
сколько ты знаков вопроса поставил? варианты: 4, 6, другое

ты еще и не читатель
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702112
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702115
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты у меня насчитал 6 запросов, как ты считаешь?
он намекает, что в твоем сообщении шесть знаков "?" ;)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702124
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязабыл никЭто как? Слезно попросить ДБ?не помню как в mssql, но в mysql есть Limit n
top n в select
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702127
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лимит курсора есть почти во всех dbms. Но в данной задаче это ненужное 5 колесо.

Оставьте его в покое.

Подумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.

И как это закодить в рамках множества таблиц.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702132
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяKorcarты еще и не читательу меня все в 1 запросе, ты у меня насчитал 6 запросов, как ты считаешь?
6 ВО просов. раскрой глаза
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702139
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд.
если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных
записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать.


maytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702142
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarу меня запроса всего 4, а вопросов у тебя аж 6!да не доглядел,
но чем ты похвастался? что 4 запроса вместо 1?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonНо в данной задаче это ненужное 5 колесо.как раз в этой задаче и есть в этом ускорение, ограничение на вывод не нужной инфы
Если-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируются
никак и (почти!) никак не ускоряются. Можешь мне поверить я собаку скушал на этом. Мы на elastic
переходили чтобы поднять перформанс некоторых вещей.

Если текст курсора содержит выражение вида WHERE ... LIKE '%....%' и других предикатов нет - то
данный план всегда будет содержать FTS.

Исключение составляют
- специфичные LIKE выражения где нет метасимвола с фронта (например LIKE 'бла%'). В этом случае индекс на основе Б+Дерева может быть использован. Во всех остальных кейсах - нет.
- проприетарные технологии в Oracle (OracleText (CTX_CAT...)) при условии что в таблице 1 единственное поле и оно стоит под этим доменным индексом.
- проприетарные технологии PostgreSQL, MySQL, MS-SQL которые поддерживают индексы текстового поиска.

Беря во внимание мой Java-интерфейс и мою постановку вероятность этих специфичных кейсов практически равна нулю.
И затачивать под них генерализованный Jdbc поиск я не хочу.

Беря во внимание что никто не хочет искать выражение 'бла%' а все хотят искать выражение в любой части документа
данная LIKE оптимизация нам не поможет. Сюда-же до кучи функциональные индексы.

Ускорить FTS под Oracle можно для крупных partitioned таблиц при использовании hint +PARALLEL(n) в n процессов по аналогии
c фьючерсами в java. Для этого почти ничего не надо делать только детектировать тип DBMS (через DatabaseMetadata)
и активировать хинт.

Опять-же для данной задачи КМК важнее чтобы она работала концептуально правильно а уже всякие тюнинги можно
сделать потом как плагины изменяющие оригинальный текст запроса.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702177
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonПодумайте почему в интерфейсе я заложил не List а Iterator в качестве типа возвращаемого значения.лист или итератор - это будет не быстрее чем это сделать в субд.
если есть права - можно получить все данные о субд и по ним построить запрос по поиску нужных данных
записывать в лист или итератор скачанное из субд это не разумно, потому как память требуемую для лист/итератор лусше отдать субд она более правильно будет использовать.

Ну всё таки. Ты ПОНИМАЕШЬ зачем вообще в Java есть интерфейс Iterator? В чем его назначение? Зачем вообще
он выделен в отдельную сущность? Почему иерархия коллекций не завершилась на уровне List?

Почему я настаиваю именно на Iterator а не сделал просто List?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702196
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы.
я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом.

и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи.

я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему.
поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702203
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonЕсли-б ты был DBA как я, то ты сразу-бы понял что задачи полного поиска по like не индексируютсяя и не заявлял про индексы.
я знаю что like очень медленный поиск, но если сравнивать mysql 5.7 с версиями до 5.7 - можно увидеть десятикратную разницу . я не знаю чем они этого добились, но факт остаётся фактом.

и эта 1.6 сек для поиска в 3лямах я считаю вполне приемлемым . всё конечно зависит от задачи.

я не могу понять что ты хочешь добиться применив свой вариант интерфейса, но я вижу что применение его будет тормозить систему.
поиск в числовых полях по like - это несколько странная задача. числовые поля как правило индексируются и поиск быстрый.
Человек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст.
Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона
который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица
которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник
налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.

А важно то что текстовый поиск имеет другую (не-реляционную) природу. И в данном моём хакатоне я предложил
его реализовать если кто осилит. Впрочем я думаю что я перефразирую тему и форкну ее отдельным топиком.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702223
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Итератор служит чисто для перебора по кортежу.
Т.е. этап формирования и фильтров уже пройден.
Или у тебя итератор по полям тоже?
Т.е. это пол задачи. Вадя говорит о первой части, а итератор это потом синтаксический сахар подкачки записей как в гугле.
А для вади любой ООП это прокладки.
Бесполезен спор.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702225
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧеловек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст.
Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона
который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица
которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник
налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.я уже показал что происходит при поиске с помощью like в числовом поле - оно преобразуется в текстовое
если мне надо найти в нескольких полях некоторые из которых числовые , я воспользуюсь (буду говорить о mysql т.к. последнее время только с ней и работаю)
оператором concat_ws(' ' , поле1, поле2...)
любое числовое поле попав в этот оператор превращается в строку.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702227
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Итератор служит чисто для перебора по кортежу.
Т.е. этап формирования и фильтров уже пройден.
вот тут вообще непонятки
если уже отбор в базе пройден зачем в итератор?
чтоб потом из итератора фильтровать?
или сделать пагинацию?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702231
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Итератор служит чисто для перебора по кортежу, т.е. этап формирования и фильтров уже пройден
а мне кажется задумка в том, что благодаря итератору мы можем в любой момент остановиться, когда решим, что уже нашли достаточно. так что не факт, что формирование уже окончено и уж тем более фильтрация. ну если мы реально собрались шерстить всю базу, то имеет смысл это делать только в момент вызова hasNext
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702233
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я кажется понял фразу "как в гугле" :)
тогда у нас есть общее и различное в подходе к поиску
я в базе ищу 1 запись.
когда мне вываливается список из 10 записей - я ищу в нем "глазами"
в терминологии mayton - гугл вывалил набор , он в нем выбрал фразу и гугл предложил кучу страниц для поиска "глазами"
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702234
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaа мне кажется задумка в том, что благодаря итератору мы можем в любой момент остановиться, когда решим, что уже нашли достаточно. так что не факт, что формирование уже окончено и уж тем более фильтрация. ну если мы реально собрались шерстить всю базу, то имеет смысл это делать только в момент вызова hasNextно тогда мы должны из базы загрузить всё в итератор. и шагать по нему используя тот же like при каждом шаге.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702236
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonЧеловек который ищет информацию - обычно не различает числа-строки-даты. Он ищет проивольный текст.
Номер счета в банке в формате хххх-хххх-хххх.... Налоговый номер который не всегда число. Номер телефона
который в принципе никогда (повертье мне) не был числом. SysGUID транзакции в терминале. Название юр-лица
которое вызывает интерес. И любая другая инфа которая интересна вам если вы - частный детектив. Сотрудник
налоговой. Спецслужб. Или просто любопытный кул-хацкер. Неважно.я уже показал что происходит при поиске с помощью like в числовом поле - оно преобразуется в текстовое
если мне надо найти в нескольких полях некоторые из которых числовые , я воспользуюсь (буду говорить о mysql т.к. последнее время только с ней и работаю)
оператором concat_ws(' ' , поле1, поле2...)
любое числовое поле попав в этот оператор превращается в строку.
Конкатенация - тяжелая операция. На некоторых DBMS сущетсвует ограничение на длину строки.
Велик шанс поймать ошибку SQL-машины.
Концептуально - я не против но нужен тестинг и еще раз тестинг.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702237
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то что ищет гугл называется "полнекстовой поиск"
гугл вывалил несколько фраз и ищет вхождение слов/словоформ из этих фраз
и предлагает кучу страниц для поиска глазами

в моём применение найти четко одну запись, а для поиска глазами предоставить максимум 10 строк
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702239
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяно тогда мы должны из базы загрузить всё в итератор
вовсе нет. у нас в итераторе есть внутренее состояние в виде плагинов, которые каким-то образом осуществляют поиск и ведут учет уже посещенных таблиц, полей и записей. соответственно только при вызове hasNext мы стартуем сканирование, при нахождении следующей записи (или блока записей) останавливаемся и возвращаем true, при вызове next() саму запись. При следующем вызове если у нас есть записи в кэше, возращаем их, иначе лезем в БД. Т.е. это что-то типа ленивого поиска

з.ы. Это мое предположение, я не знаю, что там mayton задумал - он известный затейник
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702242
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы щас полнотекстовый поиск изобретаете)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702245
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКонкатенация - тяжелая операция. На некоторых DBMS сущетсвует ограничение на длину строки.
Велик шанс поймать ошибку SQL-машины.
Концептуально - я не против но нужен тестинг и еще раз тестинг.да особенно в java
в субд есть вариант при добавлении записи иметь поле в котором будут записана строка соединённая из всех полей в которых возможен поиск.
в mysql появилась возможность виртуализации полей
Код: sql
1.
zz blob GENERATED ALWAYS AS (CONCAT_WS(' ', `Name`, `BrandName`)) VIRTUAL,


и надо сказать стоимость такой операции ниже плинтуса
и в 21670315 как раз и тестируется
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702249
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвовсе нет. у нас в итераторе есть внутренее состояние в виде плагинов, которые каким-то образом осуществляют поиск и ведут учет уже посещенных таблиц, полей и записей. соответственно только при вызове hasNext мы стартуем сканирование, при нахождении следующей записи (или блока записей) останавливаемся и возвращаем true, при вызове next() саму запись. При следующем вызове если у нас есть записи в кэше, возращаем их, иначе лезем в БД. Т.е. это что-то типа ленивого поискакак бы это ни крутилось оно работает через jdbc и в конечном итога загружает все данные из базы в java и дублирует работу субд
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702250
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
В твоем топике перебор табл на основе инфы из базы?
Там вроде api разное для ДайИменаТаблиц.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702251
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадято что ищет гугл называется "полнекстовой поиск"
гугл вывалил несколько фраз и ищет вхождение слов/словоформ из этих фраз
и предлагает кучу страниц для поиска глазами

в моём применение найти четко одну запись, а для поиска глазами предоставить максимум 10 строк
Гугл работает сложнее.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702253
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГугл работает сложнее.само собой, но в первом приближении где-то так
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702254
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадякак бы это ни крутилось оно работает через jdbc и в конечном итога загружает все данные из базы в java и дублирует работу субд
Нет. Итератор
For i table.count()
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702255
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГугл работает сложнее.но и он конечный выбор предлагает делать "глазами"
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702256
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как и обещал. Форкнул здесь 21673897
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702257
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mayton,
В твоем топике перебор табл на основе инфы из базы?
Там вроде api разное для ДайИменаТаблиц.
Т.е. это будет БДзависимо.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702259
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Нет. Итератор
For i table.count()что нет? чтоб что-то найти в данных надо их иметь, либо загрузить все сразу ,либо подгружать по мере надобности
а подгружать/загружать откуда ? из базы.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonГугл работает сложнее.но и он конечный выбор предлагает делать "глазами"
Все на чем ты сейчас настаиваешь называется 1 словом pagination. И я упаси меня господь вовсе не против
этого замечательного процесса. Давай уже поскипаем.

Но беря во внимание что мы ищем не в 1 таблице а в сете таблиц я тебе предлагаю подумать каким образом
и что ты там будешь лимитировать по TOP N (like MySQL) или ROWNUM < N (Like Oracle) и расскажи как ты
себе это представляешь для execution plan.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702261
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадязагружает все данные из базы
не обязательно. вернее практически никогда - это же зависит от клиента, т.е. если ты не написал while.hasNext, то и не загрузит

вадяи дублирует работу субд
тоже нет. опять же таки, если я понял, mayton предложил что-то типа универсального интерфейса для поиска в бд. я так понял, что не предлагается грузить записи и искать в них средствами java (тогда это было бы дублированием). вернее можно и такую реализацию сделать, но можно и реализации, которая точно так же генерит запросы к бд, тогда дублирования нет
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702262
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Т.е. это будет БДзависимо.не спорю.
ту выбор - либо ловить блох на тонкостях каждой субд, ибо универсальнос к субд и забыть о быстродействии
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Petro123mayton,
В твоем топике перебор табл на основе инфы из базы?
Там вроде api разное для ДайИменаТаблиц.
Т.е. это будет БДзависимо.
Моя интуиция подсказывает мне что Java Database Connectivity все таки спасет нас.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702264
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaтоже нет. опять же таки, если я понял, mayton предложил что-то типа универсального интерфейса для поиска в бд. я так понял, что не предлагается грузить записи и искать в них средствами java (тогда это было бы дублированием). вернее можно и такую реализацию сделать, но можно и реализации, которая точно так же генерит запросы к бд, тогда дублирования нетвот я и склоняюсь ко второму варианту генерится запрос(не важно каким образом) и получается результат , который в читабельном виде отправляется клиенту
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702267
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяв mysql появилась возможность виртуализации полей
Код: sql
1.
zz blob GENERATED ALWAYS AS (CONCAT_WS(' ', `Name`, `BrandName`)) VIRTUAL,



Нет. Мы не будем изменять объекты БД лишь только для того чтобы получить поиск.
Обойдемся возможностями Java.

В идеале нам дадут доступ R/O.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702270
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет. Мы не будем изменять объекты БД лишь только для того чтобы получить поиск.
Обойдемся возможностями Java.

В идеале нам дадут доступ R/O.вот это и есть ограничения.
тогда надо добавить условие базонезависимость.
и при этих ограничениях и откажусь от участия.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702275
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonНет. Мы не будем изменять объекты БД лишь только для того чтобы получить поиск.
Обойдемся возможностями Java.

В идеале нам дадут доступ R/O.вот это и есть ограничения.
тогда надо добавить условие базонезависимость.
и при этих ограничениях и откажусь от участия.
Раскрой мне термин - базонезависимость.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702276
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaPetro123Итератор служит чисто для перебора по кортежу, т.е. этап формирования и фильтров уже пройден
а мне кажется задумка в том, что благодаря итератору мы можем в любой момент остановиться, когда решим, что уже нашли достаточно. так что не факт, что формирование уже окончено и уж тем более фильтрация. ну если мы реально собрались шерстить всю базу, то имеет смысл это делать только в момент вызова hasNext
Именно. Более того. Итератор может быть внутри сложным. Он может сцеплять несколько курсоров.
Он может быть мультипоточным и дофетчивать данные пока пользователь смотрит первую страницу.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702302
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРаскрой мне термин - базонезависимость.кроссбраузерность , кроссбазовость
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702306
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonРаскрой мне термин - базонезависимость.кроссбраузерность , кроссбазовость
При чем здесь браузерность?
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702308
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПри чем здесь браузерность?просто как синоним
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702309
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПри чем здесь браузерность?кроссбазовость - я такого не слышал, вот чтоб было понятно откуда ноги растут...:)
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702311
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этого достаточно
http://www.oracle.com/technetwork/java/javase/jdbc/index.html The Java Database Connectivity (JDBC) API is the industry standard for database-independent connectivity between the Java programming language and a wide range of databases SQL databases and other tabular data sources, such as spreadsheets or flat files. The JDBC API provides a call-level API for SQL-based database access.

JDBC technology allows you to use the Java programming language to exploit "Write Once, Run Anywhere" capabilities for applications that require access to enterprise data. With a JDBC technology-enabled driver, you can connect all corporate data even in a heterogeneous environment.
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702317
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭтого достаточноно это не исключает возможность написать запрос ручками с учётом особенности конкретной субд
...
Рейтинг: 0 / 0
JDBC необязательные параметры
    #39702318
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmaytonЭтого достаточноно это не исключает возможность написать запрос ручками с учётом особенности конкретной субд
Не исключает. Чисто технически я допускаю что будут исключения. Редкие типы данных которые не смапились
корректно на java.sql.* но думаю что это в целом не помешает для 1-2 случаев забить хардкод типа
если там dbms=xyz то смапить какой-нить тип abc на cde.
...
Рейтинг: 0 / 0
158 сообщений из 158, показаны все 7 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC необязательные параметры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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