|
|
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Здравствуйте всем! Web-приложение работает с базой DB2. Некоторые JSP показывают данные из таблиц. Для извлечения необходимой информации всегда использовал примерно такую конструкцию: Код: plaintext 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. Сейчас нужно вытащить соединенные вместе записи двух связанных таблиц, т.е. показать результат, например, такого запроса: Код: plaintext 1. 2. Нельзя ли как-то проще разобрать ResultSet, чтобы не зависеть от запроса? Есть ли более универсальный способ для работы с запросами и их ответами? Выполнить запрос, получить ответ и показать, например в JSP. С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:03:13 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
а какой-нибудь jsf по условию нельзя использовать? какой-нибудь taglib uri="http://displaytag.sf.net" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:13:59 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Можно построить модель объектов.Всегда ведь одна таблица зависит от другой и на основании этого построить модель.. что-то вроде этого: class Table1Class{ Table2Class table2; } на эту тему можно почитать Фаулера "Архитектура корпоративных приложений",хотя по коду может показаться, что вы его читали..по методу load() например... Ну а 2 вариант вообще отказаться от объектов и просто выводить полученную информацию.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:34:14 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
load метод перепиши с использованием reflection, чтобы получилось что-нибудь типа Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:43:13 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Возможно лучше будет использовать Common DB Utils и поиграться с Handler'ом, отнаследоваться и добавить ваш функционал. А бы так сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:47:46 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
angroа какой-нибудь jsf по условию нельзя использовать? какой-нибудь taglib uri="http://displaytag.sf.net" Может и можно. Но пока я не знаю, что это такое. Буду искать. Я вот подумал. Моя задача скорее сводится к тому, как запихнуть данные ResultSet произвольного запроса в какой-нибудь объект, может ArrayList, чтобы потом спокойно его показать в JSP с помощью обычного цикла. Вот, если бы было возможно подобное: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:54:19 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Amigo111Можно построить модель объектов.Всегда ведь одна таблица зависит от другой и на основании этого построить модель.. Да. Но опять же получаем зависимость от запроса. Захочется мне издевнуться и вытащить сложный запрос, состоящий из нескольких полей одной таблицы + несколько полей второй + скалярные величины по полям третьей и т.д.- и что, опять создавать объект? Amigo111Ну а 2 вариант вообще отказаться от объектов и просто выводить полученную информацию.. Вот это может и подойдет. Только как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 16:59:49 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
если использовать java.sql.ResultSetMetaData, то всё станет значительно проще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:04:48 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
rimanload метод перепиши с использованием reflection, чтобы получилось что-нибудь типа Понял. Применяем один метод для различных типов объектов. В этом случае результат запроса можно запихнуть в два ArrayList, каждый из который будет представлять отдельную таблицу, а объекты в них будут соотноситься по индексу. Это мысль. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:10:21 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
ТимоНВозможно лучше будет использовать Common DB Utils и поиграться с Handler'ом, отнаследоваться и добавить ваш функционал. А бы так сделал. zalexakaесли использовать java.sql.ResultSetMetaData, то всё станет значительно проще Спасибо. Покопаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 17:13:49 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Все всего понаписали. Напишу, как это должно выглядеть в моем понимании. Создаем Класс: class SelectResponse{ List columns; List rows; } и во время получение ResultSet,получаем из него ResultSetMetaData и вынимаем из него имена колонок и засовываем их в columns.Далее получаем кол-во колонок из ResultSet и запускаем цикл по заданному кол-ву, что-то вроде и засовываем значения в ArrayList row,который добавляем к rows; List row = null; while(rs.next()){ row = new ArrayList(); for(int index = 0;index<columnCount;index++){ row.add(rs.getObject(index); } rows.add(row); } Теперь у нас есть объект, содержащий только имена колонок и полученные строки, независимо от того сколько таблиц участвует в запросе. Надеюсь, нормально объяснил. Можно конечно создать отдельные классы для строк и колонок, но это уже по желанию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 19:55:10 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Впрочем,наверное это вы повыше и предполагали =)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:03:16 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Кстати,странно, у вас connection закрывается, а Statement и ResultSet - нет..надо все закрывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 20:12:37 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Amigo111Кстати,странно, у вас connection закрывается, а Statement и ResultSet - нет..надо все закрыватьзачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 22:10:08 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Правило такое..почитай JDBC закрываешь ResultSet,потом Statement,затем Connection,именно в такой последовательности,а иначе без закрытия 1 и 2 не закроется Коннект.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 00:12:27 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Amigo111Правило такое..почитай JDBC закрываешь ResultSet,потом Statement,затем Connection,именно в такой последовательности,а иначе без закрытия 1 и 2 не закроется Коннект.. а ты проверял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 00:50:15 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Amigo111 Все всего понаписали. Напишу, как это должно выглядеть в моем понимании. Создаем Класс: class SelectResponse{ List columns; List rows; } Спасибо. Именно это у меня уже стало проглядываться после того, как zalexaka посоветовал посмотреть java.sql.ResultSetMetaData. Amigo111Кстати,странно, у вас connection закрывается, а Statement и ResultSet - нет..надо все закрывать Это я перенял из книги, по которой учусь. Там ни Statement, ни ResultSet не закрываются. Но все же учту ваш совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 09:37:56 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Amigo111без закрытия 1 и 2 не закроется Коннект..Серьезно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 10:21:23 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Я не натыкался с этим на грабли, но лучше не рисковать. Читал, что коннект может не закрыться.. Посмотрю сегодня вечером эту статейку и точно напишу последствия, а пока ссылка на тему, где явно представлен код закрытия всего, да и то сначала неправильно =) Правильно в блоке finally прописать проверку на null Ссылка : http://]www.sql.ru/forum/actualthread.aspx?tid=243907&pg=-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 12:13:32 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Посмотрел статьи, почитал api и делаю вывод: 1)Не обязательно закрывать Statement и ResultSet перед закрытием Connection, но весьма желательно. 2)При закрытии Statement автоматически закрывается ResultSet, но Statement не закрывается при закрытии Connection. P.S. На курсах от SoftJoys учили закрывать все!(в качестве подстраховки, мотивируя это тем, что большую часть кода пишут русские программисты, а они часто полагаются на "авось пронесет") =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 12:18:31 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Statement, ResultSet и Connection это все интерфейсы и поэтому нужно смотреть документацию по их реализации, а именно по конкретному JDBC драйверу. Если там ничего не написано, то лучше закрывать все ну или читать официальную доку по JDBC API (не помню чего там по этому поводу пишут) и полагать, что драйвер на 100% соответствует спецификации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 12:47:37 |
|
||
|
Работа с информацией из ResultSet
|
|||
|---|---|---|---|
|
#18+
Ага ... еще добавить сюда, как реализован пул соединений и что там происходит при вызове connection.close(). Даже в samles WebLogic видел неправильную работу с jdbc, что уж тогда говорить о нас, простых смертных. Чтобы на такие грабли не наступать лучше пользоваться какими-нибудь framewoks, ну или самому инфрастуктуру написать (аля JdbcTemplate). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 13:39:42 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34624140&tid=2145284]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 299ms |
| total: | 459ms |

| 0 / 0 |
