|
|
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Как правильно закрывать ResultSet ? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. При таком варианте в rs.close() возможны исключения, в результате PreparedStatement останется открытым. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Такой вроде правильнее, но очень громоздкий и нечитабельный. А как пишите вы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:31:13 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Alexey123, я делаю Код: java 1. остальное по аналогии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:40:48 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Apache Commons DBUtils http://commons.apache.org/proper/commons-dbutils//examples.html Java 7 try with resource http://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:41:48 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Alexey123, 1. вариант в лоб - поставь выше строчку pstmt.close();.....даже потому что создаётся раньше. 2. дай ссылку на документацию, с чего это там исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:44:03 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Добрый день, Petro123! > 1. > вариант в лоб > - поставь выше строчку pstmt.close();.....даже потому что создаётся раньше. Бред. > 2. дай ссылку на документацию, с чего это там исключение. С того, что БД это внешняя система, которая может умереть сама, или отвалится сеть. Поэтому _любая_ операция может привести к исключению. Другое дело, что исключение при закрытии коннекта кроме логов никуда более попадать не должна. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:48:34 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Документация ResultSet close void close() throws SQLException Releases this ResultSet object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed. The closing of a ResultSet object does not close the Blob, Clob or NClob objects created by the ResultSet. Blob, Clob or NClob objects remain valid for at least the duration of the transaction in which they are creataed, unless their free method is invoked. When a ResultSet is closed, any ResultSetMetaData instances that were created by calling the getMetaData method remain accessible. Note: A ResultSet object is automatically closed by the Statement object that generated it when that Statement object is closed, re-executed, or is used to retrieve the next result from a sequence of multiple results. Calling the method close on a ResultSet object that is already closed is a no-op. Throws: SQLException - if a database access error occurs Т.е. его закрывать необязательно??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:51:23 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, по п.2 странно. Если отвалилась сеть - будет райзе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 10:52:20 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Добрый день, Petro123! > по п.2 странно. Если отвалилась сеть - будет райзе? Да. ResultSet создаёт объекты на стороне БД. close() освобождает эти объекты. При этом это может не пройти- вот и исключительная ситуация. Другое дело, что при этом клиент не может сделать ничего в принципе, поэтому пишем в лог и всё. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:01:59 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraДругое дело, что при этом клиент не может сделать ничего в принципе, поэтому пишем в лог и всё. А я думаю не просто в лог, а наверх (например в RuntimeException). Операция не выполнена, транзакция должна откатится. Так какая Ваша форма записи? Java 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:06:27 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, странно. У меня всегда были длинные транзакции - по 8 часов. И райзе было только при НОВОМ запросе. Надо проверить. ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:08:10 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Добрый день, Alexey123! >> Другое дело, что при этом клиент не может >> сделать ничего в принципе, поэтому пишем в лог и всё. > А я думаю не просто в лог, а наверх (например в RuntimeException). Зависит от логике приложения. И от операции. Если update был, то да- он скорее всего не закомичен. А если нам надо было одну строку прочитать и про БД забыть- то пофиг. > Операция не выполнена, транзакция должна откатится. Если она есть. Что маловероятно при наличии ResultSet :) > Так какая Ваша форма записи? Java 6. Лучше переходить на 7ку, тем более что у 6ки заканчивается техподдержка. Но писал так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:12:08 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Добрый день, Petro123! > странно. У меня всегда были длинные транзакции - по 8 часов. Вот по 8 часов точно не надо. > И райзе было только при НОВОМ запросе. Я думаю, зависит от драйвера. Теоретически имеет право пожаловаться. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:13:04 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
GKS_Samara, - теоретически он не должен создавать в БД что-то А практически у меня так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:19:32 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
в 7 Код: java 1. - закрываются сами в 6 пишете хелпер Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 11:39:30 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Лагман, интересная мысль. А если её как-то так развить (ведь интерфейса Closeable нет): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 12:26:20 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Alexey123, так развивать не стоит ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2013, 12:33:57 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#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. Никаких проглатываний исключений, так как секция finally пишет только в лог. Лагман был прав, спасибо ему. А рефлексия медленнее работает: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Ваше мнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 10:05:02 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Alexey123Ваше мнение? не плохо бы проверить на null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 10:09:28 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
am_sasaAlexey123Ваше мнение? не плохо бы проверить на null Если пытаемся закрыть ресурс null, то это ошибка. В conn.close(); породится NullPointerException которое запишется в лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 10:24:22 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Добрый день, Alexey123! > Если пытаемся закрыть ресурс null, то это ошибка. В conn.close(); > породится NullPointerException которое запишется в лог. Создание и пробрасывание exception - долгая операция. Лучше проверить на null - это вообще ничего. -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 10:31:56 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraСоздание и пробрасывание exception - долгая операция. Лучше проверить на null - это вообще ничего. Согласен с Вами, но возникновение null это ошибка, а не рядовая ситуация. Её не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 10:38:23 |
|
||
|
Закрытие ResultSet
|
|||
|---|---|---|---|
|
#18+
Alexey123Если пытаемся закрыть ресурс null, то это ошибка. В conn.close(); породится NullPointerException которое запишется в лог. ещё раз. Проверь пожалуйста данный кейс: - открой длинную транзакцию получением класса. - выдерни шнур сети из сетевой - сделай Класс.Close; Будет ошибка? Емли будет - сюда её текст. Это ведь не трудно чем рассуждать? Те классы и провайдеры что мне попадались - не возбуждали исключение на закрытие и уничтожение объекта. СУБД было фиолетово что кто-то отключился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2013, 12:01:44 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38192643&tid=2129736]: |
0ms |
get settings: |
21ms |
get forum list: |
27ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 333ms |
| total: | 517ms |

| 0 / 0 |
