Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дерево JTree и SQLException [90007-153] 
V
    Опции темы
Javaca
  Дата 17.3.2011, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.3.2011

Репутация: нет
Всего: нет



Уважаемые господа программеры, я новичок в Java, поэтому прошу не пинать меня ногами smile
Помогите мне пожалуйста построить работающее дерево из БД в JTree. Использую базу данных H2 и JDK 1.6.0_25. 
Теперь по существу. Если закоментирован "ResultSet rs2", то узлы имеющие нулевой pid строяться прекрасно, а если раскоментирован как сейчас, то строиться полностью один узел от начала и до конца и в SQLException пишет: The object is already closed [90007-153]. Все остальные узлы имеющие нулевой pid и их подъузлы не отображаются. Теоретически все должно быть в порядке. 
Что я не так делаю и где моя ошибка? Помогите пожалуйста.

----------------------------------------------------------------------------------

Код

CREATE TABLE IF NOT EXISTS `primer` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `pid` int(10) NOT NULL default '0',
  `name` varchar(120) NOT NULL,
  PRIMARY KEY  (`id`)
);

INSERT INTO `primer` (`id`, `pid`, `name`) VALUES
(1, 0, 'Книги'),
(2, 0, 'Журналы'),
(3, 0, 'Аудио'),
(4, 0, 'Видео'),
(5, 1, 'Библия'),
(6, 1, 'Самоучитель Java'),
(7, 2, 'Chip'),
(8, 2, 'Хакер'),
(9, 3, 'Английский язык'),
(10, 3, 'Немецкий язык'),
(11, 4, 'Терминатор'),
(12, 4, 'Терминатор-2'),
(13, 4, 'Терминатор-3');



----------------------------------------------------------------------------------


Код

import java.sql.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;


class derevo
{

    public static void main(String[] args) throws Exception
    {
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
        
        JFrame frame = new JFrame("Example JTree");
        Container cp = frame.getContentPane();
        frame.setSize(400,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        DefaultMutableTreeNode defroot = null;
        DefaultMutableTreeNode defchild = null;
        DefaultMutableTreeNode node = new DefaultMutableTreeNode("Root");
        
        try 
        {
        
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("SELECT * FROM primer WHERE pid=0");
          
             while(rs.next())
             {
             
                String root = rs.getString("name");
                defroot = new DefaultMutableTreeNode(root);
                node.add(defroot);

                /*****/
                    ResultSet rs2 = stmt.executeQuery("SELECT * FROM primer WHERE pid = "+rs.getString("id"));
                    while(rs2.next())
                    {
                        
                        String child = rs2.getString("name");
                        defchild = new DefaultMutableTreeNode(child);
                        defroot.add(defchild);
                        
                        //JTree tree = new JTree(defroot);
            
                    }
                /*****/
                JTree tree = new JTree(node);
                cp.add(tree);

             }

        stmt.close();
        
        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
        
        frame.setVisible(true);     
        conn.close();

    }
  
}


PM MAIL   Вверх
jk1
Дата 17.3.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Попробуйте использовать два разных statement для двух разных запросов


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Javaca
Дата 17.3.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.3.2011

Репутация: нет
Всего: нет



Цитата(jk1 @ 17.3.2011,  16:57)
Попробуйте использовать два разных statement для двух разных запросов

Да, действительно помогло. Работает как часы. Благодарю за помощь!!!

Добавлено через 4 минуты и 9 секунд
Если кому нужно!!!
Рабочий пример дерева JTree из БД (SQL таблица выше):


Код

import java.sql.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;


class derevo
{

    public static void main(String[] args) throws Exception
    {
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
        
        JFrame frame = new JFrame("Пример JTree");
        Container cp = frame.getContentPane();
        frame.setSize(400,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        DefaultMutableTreeNode defroot = null;
        DefaultMutableTreeNode defchild = null;
        DefaultMutableTreeNode node = new DefaultMutableTreeNode("Корень");
        
        try 
        {
        
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("SELECT * FROM primer WHERE pid=0");
          Statement stmt2 = conn.createStatement();
          
             while(rs.next())
             {
             
        String root = rs.getString("name");
        defroot = new DefaultMutableTreeNode(root);
        node.add(defroot);

        ResultSet rs2 = stmt2.executeQuery("SELECT * FROM primer WHERE pid = "+rs.getString("id"));
        while(rs2.next())
        {
            String child = rs2.getString("name");
            defchild = new DefaultMutableTreeNode(child);
            defroot.add(defchild);
        }
        JTree tree = new JTree(node);
        cp.add(tree);

             }
        stmt2.close();
        stmt.close();
        
       } catch(SQLException ex) {
    System.err.println("SQLException: " + ex.getMessage());
       }
        
        frame.setVisible(true);     
        conn.close();

    }
  
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.