| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > один PreparedStatement на один DAO |
| Автор: vogdb 15.12.2011, 10:23 | ||
| Здравствуйте! Интересно имеет ли право на жизнь вот такая вот реализация работы с PreparedStatement. Далее псевдокод
Нужно ли будет синхронизировать доступ к методу get(long id)? Если да, то как? |
| Автор: danilych 15.12.2011, 10:38 |
| Если к классу будут обращаться несколько потоков одновременно, т.е. вызывать ваш метод public Simple get(long id), то однозначно будут траблы. Поэтому лучше в этом методе создавать объект класса PreparedStatement. Если же вы сделаете синхронизацию по вашему методу get, то потеряете в производительности, т.к. если запрос будет очень тяжелый и будет выполняться скажем 5 секунд, все остальные потоки будут ждать это время. |
| Автор: Старовъръ 11.2.2012, 09:51 |
| vogdb, разберись что такое Prepared Statement и как он работает. Когда ты вызываешь connection.prepareStatement("select * from where params..."), то объект не создается новый, а возвращается из кеша. У каждого соединения есть такой кеш, то бишь если это одно и то же соединение, то все сработает по плану. Если же у тебя несколько соединений, то для использования кеша, нужно подключить Connection Pool как уже сказал товарищ LSD. Подробней о PreparedStatement и их кешировании можешь почитать http://www.javatalks.ru/sutra126142.php#126142. |