![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
hagerds |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 12.12.2011 Репутация: нет Всего: нет |
всем добрый день!
создал Дерево JTree в него добавляю и удаляю папки и файлы. примерно как в Хормстране тома 2 глава 6. пример:
Крень/ /Папка_1/Папка_1.1/x /Папка_1/Папка_1.1/y /Папка_1/f /Папка_2/i /Папка_2/j /k БД: файл | путь x | y | f | Как лучше или правильней будет сохранить это дерево (для дольнейшего востановыления его при очередном запуске проги)? моё предположение =) 1)получить список всех путей и сохранить каждый путь в свою строку с именем столбца "путь" БД. или 2)сохранить в столбец "путь" БД последние узлы в которых лежат файлы. а корнь и остольне узлы мы сохраним в файл как Корень/Папка_1/Папка_1.1 Корень/Папка_1 Корень/Папка_2 Корень/ при считывании очередной строки из файла мы сортируем базу по последнему узлу и добовляем в него все листы найденные после сортировки. Как получить пути всех листов /Папка_1/Папка_1.1/x, /Папка_1/Папка_1.1/y ...и т.д? |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Обычно хранят список узлов и у каждого есть родитель, кроме корня. Корни ты можешь сохранить в отдельной таблице, а ветки дёргать по одной. Для сокращения количества запросов нужно добавить поле root в первую таблицу, тогда останится только лишь восстановить иерархию.
Добавлено через 9 минут и 19 секунд
Как-то так, навскидку. Но тут есть простор для оптимизации. Можно даже одной таблицей обойтись попробовать. -------------------- ![]() |
|||
|
||||
javafreshglow |
|
||||||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.3.2012 Репутация: нет Всего: нет |
Добрый день. Вы спрашивали о сохранении дерева и в БД :
- мне не понятно где Вы хотите хранить. Относительно хранения в файле вероятно можно хранить в xml или json. Но если хранить в базе, я использую БД - Oracle, можно использовать следующую конструкцию, воспользовавшись возможностями БД: Создадим таблицу:
Добавим указатель на родительский узел ("иерархию") :
Добавим элементы:
Проверим, что получилось, используя возможности Oracle - SYS_CONNECT_BY_PATH, для получения пути:
Получилось следующее:
Поскольку вопрос по Java, я далее создаю объектные классы и маппинг для классов. Я использую EclipseLink. Часть маппинга, для примера покажу только класс StoreTree, в xml представлении:
Класс TreePath - не привожу. Т.е. для получения пути - получаем список классов TreePath/ Для построения дерева, получаем корень дерева - класс StoreTree и последовательно получая его дочерние элемнеты - строим дерево. Также подключив кэш (например, http://ehcache.org) можно добиться некоторой скорости работы. Узлы деревьев насчитывали до 10 тысяч узлов. Я ответил на Ваш вопрос? Это сообщение отредактировал(а) javafreshglow - 18.3.2012, 16:55 |
||||||||||||||||||
|
|||||||||||||||||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
javafreshglow, оформи код тегом code, пожалуйста
-------------------- ![]() |
|||
|
||||
hagerds |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 12.12.2011 Репутация: нет Всего: нет |
спасибо всем за ответы. но у меня не совсем получается сделать!!!!
javafreshglow очень хорошо объяснил, но на оракле. я работаю с MySql. там таких команд нет. пытаюсь сделать следующее!!! после добавления узлов и листов на фрэйм в JTree у меня получается красивая иерархия ![]() ![]() ![]() начал проходить рекурсией и возникли проблемы. как получить имена всего списока и их позиции? ![]() ![]() ![]() |
|||
|
||||
hagerds |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 12.12.2011 Репутация: нет Всего: нет |
TreePath root= jTree.getClosestPathForLocation(0, 0);
вот так получаю корень. Как получить все вложенные элементы в root или их число, что бу пройтись циклом или итератором? |
|||
|
||||
hagerds |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 12.12.2011 Репутация: нет Всего: нет |
DefaultMutableTreeNode root= (DefaultMutableTreeNode) jTree.getModel().getRoot() ;
int numberChildrens= world.getChildCount(); Всем спасибо! |
|||
|
||||
hagerds |
|
|||
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 12.12.2011 Репутация: нет Всего: нет |
всем спасибо
![]() ![]() ![]() Это сообщение отредактировал(а) hagerds - 28.4.2012, 21:33 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |