![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Здравствуйте, уважаемые.
Почитал все на форуме о properties и так и не понял нужно оно мне или нет. А проблема стоит такая: У меня есть класс для работы с БД, его методы вызываются из JSP. Так вот, хочу все запросы к БД записать в файл BDProp.properties наподобие:
Чтобы можно было их в любой момент корректировать. Стоит ли мне делать это в файле properties, если да, то где его бандлить: в JSP или можно мой класс сделать Листенером или Фильтром и все делать в нем, а если так, то как тогда связать такой класс с JSP? -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Отставив в сторонку пока вопрос с хранением запроса в Properties, обращаю твоё внимание на гораздо более интересную вещь.
Делать так настоятельно НЕ рекомендуется. Используй PreparedStatement. В противном случае ты серьезно потеряешь в производительности. Дело в том, что для каждого такого "склеенного" запроса будет создаваться новый план выполнения. В случае PreparedStatement - план будет составлен один раз. А что касается твоего вопроса - мы делали такие запросы константными строками в классах. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Спасибо за замечание, но эт я просто для примера привел - так, набросок.
А делаеться как раз через PreparedStatement и насчет констант я знаю. Смысл в том, что бы сделать этот класс универсальным для выполнения запросов, которые я бы безболезненно мог бы редактировать даже со странички. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Т.е. чтобы можно было изменять тексты запросов без перекомпиляции, в рантайме? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Ага. А в JSP просто передавать моему классу ключ тогда, когда мне надо. Я в фильтрах и листенерах пока не селен, так что делаю все через JSP.
Но если нет, то тогда заброшу пока тему о properties -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| ALKS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 6 Всего: 11 |
если ты будеш использовать для чтения файла properties класс java.util.Properties то фактически каждый раз вынимая запрос будеш читать фаил а сие есть зло. если ты будеш использовать java.util.ResourceBundle то напоришся на его внутринний кэш т.е. корректировать запросы на лету - не получиться.
я бы в твоем случае, хранил бы запросы... в БД. |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Ага. Спасибо.
Пока и не собираюсь Вот java.util.ResourceBundle меня и интересует. Где мне его создавать - в классе или JSP? А класс мне переделывать под фильтр или листенер или постоить цепочку бинов доступа к этому классу? В общем подскажите основную идею работы с java.util.ResourceBundle, если я хочу разделить бизнесс-логику и прдеставление. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Частенько делали простенький, заточенный под конкретную задачу, конструктор запросов. + Константы, как Lamer George заметил.
В пропертисах можно хранить имена таблиц и полей. При старте - подгружать их и делать препаред стейтменты, используя свой конструкторчик(который, кстати, будет зачастую гарантировать отсутствие досадных синтаксических ошибок в запросе) -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Это все клево.
Но задача состоит в том, чтобы код моего класса для работы с БД был переносим в другое приложение с другой БД без подрехтовки и перекомпиляции. В общем всем спасибо. Что-то я понял. Буду следовать вашим советам. Как получится, выставлю код на обозрение (если интересно) -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| ALKS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 6 Всего: 11 |
MisterCleric,
ResourceBundle.getBundle("cool_property_file") - это статический вызов! тебе не нужно создавать никакого объекта. более того этот класс обеспечивает внутринний кэш, так что в большинстве случаев ты будеш тягать уже закэшированные в память данные. и совершенно безразлично где ты будеш вызывать. удобно тебе в JSP - юзай в JSP. |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Делай конструктор, который использует стандартный СКЛ в пропертисы заноси имена таблиц и полей, которые на другой системе подрихтуешь Но если все запросы в корне будут различаться при переносе.... - тогда, конечно, лажа -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| MisterCleric |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Всем здрасте!
Значит так. У меня что-то вышло, как и обещал выкладываю. Бин для работы с БД:
Поскольку DataSource берется из JNDI, то бин независит от сервера БД Поскольку все SQL-выражения берутся из ResourceBundle, а его параметры передаються в конкретной задаче, то он не зависит от приложения. Файл .properties выглядит примерно так:
И примерно такова работа с ним:
Не претендую на гениальность. Уверен, что можно еще больше разделить бизнес-логику и представление. И по ходу вопрос можно ли сделать implements Filter по обращению к БД? -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||||
|
|||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |