Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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. |