powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вывести категории в Java
6 сообщений из 6, страница 1 из 1
Как вывести категории в Java
    #38263125
Zhazhah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, понимаю тема изъезженная однако на Java примера не нашел. Есть простая таблица

Код: plsql
1.
2.
3.
4.
5.
id   parent   name
1    0        Программирование
2    1        Java
3    0        Базы данных
4    3        MySql





Как рекурсивно или другим способом вывести все категории учитывая вложенность и.тд??
...
Рейтинг: 0 / 0
Как вывести категории в Java
    #38263133
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhazhah,

Что именно вызывает затрудение? Java вообще? Работа с JDBC? Непосредственно рекурсия? Всё вместе? Вы что-то уже пробовали?
...
Рейтинг: 0 / 0
Как вывести категории в Java
    #38263262
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zhazhah
Вы уже вывели). Остальное ГУИ
...
Рейтинг: 0 / 0
Как вывести категории в Java
    #38263386
Zhazhah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Код: 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.
private void categoriesTree(int id, int depth) {

        LinkedHashMap<Integer, HashMap> Tree = new LinkedHashMap();

        try {

            ResultSet rs = stmt.executeQuery("SELECT * FROM `categories` WHERE `parent`=" + id + ";");

            while (rs.next()) {

                HashMap<String, String> content = new HashMap();

                content.put("name", rs.getString("name"));
                content.put("hurl", rs.getString("hurl"));
                content.put("depth", Integer.toString(depth));

                CategoriesTree.put(rs.getInt("id"), content);

                categoriesTree(rs.getInt("id"), depth);

            }

        } catch (SQLException e) {
            System.out.println(e);
        }
}



В итоге, исключение:
Код: java
1.
java.sql.SQLException: Operation not allowed after ResultSet closed
...
Рейтинг: 0 / 0
Как вывести категории в Java
    #38263446
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тут рекурсия? Вы создаёте новый resultSet закрывая старый.
Читайте все записи одним SQL запросом.
Все записи поместите в Map<Integer, Node>
Код: java
1.
2.
3.
4.
5.
6.
Node{
int id,
int parentId,
String name,
List<Node> children
}


После вычитки, пройдитесь по Map для каждой записи добавьте её в родителя:
Код: java
1.
map.get(node.parentId).children.add(node);
...
Рейтинг: 0 / 0
Как вывести категории в Java
    #38263530
Zhazhah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, Спасибо за помощь.

Код: 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.
private class Node {

        int id;
        int parentId;
        String name;
        List<Node> children;
    }

    public ArserTest() {

        Map<Integer, Node> category = new LinkedHashMap();

        Node node = new Node();
        node.id = 1;
        node.parentId = 0;
        node.name = "Программирование";
        node.children = new LinkedList();
        category.put(1, node);

        node = new Node();
        node.id = 2;
        node.parentId = 1;
        node.name = "Web";
        node.children = new LinkedList();
        category.put(2, node);

        node = new Node();
        node.id = 3;
        node.parentId = 2;
        node.name = "Java, PHP";
        node.children = new LinkedList();
        category.put(3, node);


        HashSet<Integer> delete = new HashSet();

        for (Map.Entry<Integer, Node> entry : category.entrySet()) {
            if (category.containsKey(entry.getValue().parentId)) {
                category.get(entry.getValue().parentId).children.add(entry.getValue());
                delete.add(entry.getKey());
            }
        }

        for (Integer element : delete) {
            category.remove(element);
        }

        // вывод категорий
        for (Map.Entry<Integer, Node> entry : category.entrySet()) {
            System.out.println(category.get(entry.getKey()).name);
            ListIterator<Node> itr = category.get(entry.getKey()).children.listIterator();

            while (itr.hasNext()) {
                Node n = itr.next();
                System.out.println(n.name);
                
                ListIterator<Node> itr2 = n.children.listIterator();
                while (itr2.hasNext()) {
                    System.out.println(itr2.next().name);
                }
                
            }
        }


        //System.out.println(category.get(1).children.get(0).children.get(0).name);
        //System.out.println(category);

    }



Нельзя ли как то красивее выводить категории без этих вложенных циклов?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вывести категории в Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]