|
|
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Добрый день ,возник вопрос Есть код Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. Мне говорят,что я не правильно использую PS , нужно "Один раз инициализировать , много раз его использовать и потом один раз каждый закрыть" а у меня ,например здесь ,сколько раз будет вызываться insert - столько будет вызываться создание PS. А должно быть один раз создать перед всеми вызовами, и одни раз закрыть после всех вызовов . Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Я не понимаю ,что мне нужно деалать(точнее как). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 18:00 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
alexander30Мне говорят,что я не правильно использую PS , нужно "Один раз инициализировать , много раз его использовать и потом один раз каждый закрыть" По-моему ваши советчики заблуждаются. alexander30Я не понимаю ,что мне нужно деалать(точнее как). Для начала перейти на try with resource http://stackoverflow.com/questions/8066501/how-should-i-use-try-with-resources-with-jdbc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 19:10 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Blazkowiczalexander30Мне говорят,что я не правильно использую PS , нужно "Один раз инициализировать , много раз его использовать и потом один раз каждый закрыть" По-моему ваши советчики заблуждаются. Почему они заблуждаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 21:25 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПочему они заблуждаются? Потому что смысл фразы "один раз инициализировать" странный. Переиспользовать PreparedStatement имеет смысл только для batch update. Я не вижу чтобы он здесь сильно нужен был. И топикастеру про batch\пакетную обработку тоже ничего не сказали. План же самого запроса в RDBMS будет и так переиспользоваться, как раз из-за PreparedStatement и отсутствия динамических запросов. Основные проблемы приведенного кода в работе с Connection без DataSource, закрытием без finally и с полями, которые не только бесполезны но ещё и вылезут боком в многопоточном окружении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 07:48 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
alexander30Есть код Многабукв ;) В коде каша. В создание запроса каждый раз нет большой проблемы, если операции не идут часто. Т.е. это МОЖЕТ быть проблемой, но не факт, что будет. Но хранение PreparedStatement создаёт другие проблемы- протухания коннекта, к примеру. Или многопоточного вызова :D А вот что надо сделать в первую очредь, так это: 1. Т.к. есть некое "extends Dao", то логично вынести создание коннекта в отдельный класс- вот он-то как раз пусть будет один на всех. Заодно, если случится, легко сделать пересоздание коннекта (реально связь с БД может теряться, если это не студенческий проект) 2. Если PreparedStatement создаётся каждый раз, то не надо полей в классе. 3. Надо использовать try-with-resource 4. Ещё плохо в Вашем поде явное указание пути к БД и логина/пароля. Это должно быть в ресурсах, или ХОТЯ БЫ константах. alexander30Я не понимаю ,что мне нужно деалать(точнее как). А это не вопрос. Это диагноз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 09:07 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПлан же самого запроса в RDBMS будет и так переиспользоваться, как раз из-за PreparedStatement и отсутствия динамических запросов. Не скажи. На днях показывал челу, что вынос создания PreparedStatement из цикла и его переиспользование убирает ошибку Oracle про количество открытых курсоров. Так что на RDBMS надейся, а сам не плошай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 11:26 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Не скажи. На днях показывал челу, что вынос создания PreparedStatement из цикла и его переиспользование убирает ошибку Oracle про количество открытых курсоров. Так что на RDBMS надейся, а сам не плошай. Натянул сову на глобус. Я тут цикла не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 11:42 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, alexander30 а у меня ,например здесь ,сколько раз будет вызываться insert - столько будет вызываться создание PS. А должно быть один раз создать перед всеми вызовами, и одни раз закрыть после всех вызовов . То есть предполагается многократное количество вызовов insert подряд извне. В теле класса его и не увидишь. М.б. надо было создать, что-то типа static void insertAll(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 15:04 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
но в любом случае хранить в каждом DAO connection - это не совсем верно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 15:07 |
|
||
|
Использование PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Народ, не путайте божий дар с яичницей. PreparedStatement он по тому и PREPARED, что его можно создать один раз, один раз разпарсить SQL команду и дальше много раз делать INSERT. С этой точки зрения, коллеги абсолютно правы. Будет экономиться как heap в java (меньше мусора), сетевой трафик (роунд-трипы), ресурсы сервера (не нужно будет делать лишних парсе) etc... Дальше начинается яичница, то бишь Java. В которой разработчики решили не вводить ООП-диструкторы. Соответственно инициализируя PreparedStatement один раз и сохраняя его например в данных класса, есть риск получить resource leak. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2015, 16:35 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38993452&tid=2125245]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 451ms |

| 0 / 0 |
