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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача соединения с БД 
V
    Опции темы
Listad
Дата 4.5.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сдравствуйте!! Я недавно начал изучать Java. Мне в ВШП дали задание с БД. Мне нужно создать соединение с БД (MySQL) и дальше продолжить работу с БД. Соединение надо создавать в отдельном окошке Connect, которое вызывается из меню. Соединение в Connect я создаю, а вот передать его в основной класс не могу. Почему-то блок в основном окне реализуется раньше чем происходит соединение
Цитата

 menu.add(connect);
           connect.addActionListener(new ActionListener(){

               public void actionPerformed(ActionEvent e) {
                   try {
                       if (con != null && !con.isClosed()) con.close();
                   } catch (SQLException e1) {
                       e1.printStackTrace();  
                   }
                   Connect obj = new Connect();
                   try{
      ошибка        // con = obj.getConnection();
                       System.out.println("return connection!");
                   } catch(Exception e1){
                       JOptionPane.showMessageDialog(null, e1.toString(), "Error", JOptionPane.ERROR_MESSAGE );

                   }

               }
           });

с помощью System.out.println("return connection!") я отследил эту проблему! Когда я вызываю меню Connect при появлении окна реализуется этот блок, соответственно, само соединение когда устанавливается, не передаётся smile . Подскажите, что сделать, что бы этот блок выполнялся после того, как я проведу соединение в окошке Connect?  
PM MAIL   Вверх
batigoal
Дата 5.5.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Я не понял вот эту фразу: 
Цитата(Listad @  4.5.2006,  20:22 Найти цитируемый пост)
Почему-то блок в основном окне реализуется раньше чем происходит соединение

Какой блок? 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Listad
Дата 5.5.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Блок, который я закинул. Он выполняется раньше, чем я установлю соединение в окошке Connect и передам его. Получается, когда я нажимаю на меню вот эта часть кода тоже реализуется: 
Код

 try{
                       con = obj.getConnection();
                       System.out.println("return connection!");
                   } catch(Exception e1){
                       JOptionPane.showMessageDialog(null, e1.toString(), "Error", JOptionPane.ERROR_MESSAGE );

                   }

               }
 Connect, 
А мне надо чтобы она выполнялась после того, как выполнится код Connect.  
PM MAIL   Вверх
ShamanTrirukiy
Дата 5.5.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приведи весь код. По обрывкам понять сложно...
 
PM MAIL   Вверх
Listad
Дата 5.5.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Основной класс:
Код

public class Query extends JFrame {
    public ResultSetTableModel tableModel;
    public JTextArea queryTextArea;
    public Connection con;
    public Statement statement;
    private String txt;
    private ResultSet rs;
    public Query(){
           JFrame query = new JFrame("Query");
           JMenuBar menuBar = new JMenuBar();
           query.setJMenuBar(menuBar);
           JMenu menu = new JMenu("Menu");
           menuBar.add(menu);
           JMenuItem connect = new JMenuItem("Connect");
           menu.add(connect);
           connect.addActionListener(new ActionListener(){

               public void actionPerformed(ActionEvent e) {
                   try {
                       if (con != null && !con.isClosed()) con.close();
                   } catch (SQLException e1) {
                       e1.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                   }
                   Connect obj = new Connect();
                   try{
                       con = obj.getConnection();
                       System.out.println("return connection!");
                   } catch(Exception e1){
                       JOptionPane.showMessageDialog(null, e1.toString(), "Error", JOptionPane.ERROR_MESSAGE );

                   }

               }
           });
           JMenuItem exit = new JMenuItem("Exit");
           menu.add(exit);
           exit.addActionListener(new ActionListener(){

                       public void actionPerformed(ActionEvent e) {
                           System.exit(0);
                       }
                   });


           try {
               queryTextArea = new JTextArea(7,100);
               txt = queryTextArea.getText();

               JScrollPane scrollPane = new JScrollPane(queryTextArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
               JLabel queryLabel = new JLabel("Query");
               JButton but = new JButton("Run query");

               but.addActionListener(new ActionListener(){
                   public void actionPerformed(ActionEvent e) {
                       try {
                           try {
                           statement = con.createStatement();
                           } catch(Exception e3){
                               JOptionPane.showMessageDialog(null, e3.toString(), "Statement error", JOptionPane.ERROR_MESSAGE );
                           }
                           rs = statement.executeQuery (txt);
                           tableModel.setResultSet(rs);

                       } catch (SQLException e1) {
                           JOptionPane.showMessageDialog(null, e1.toString(), "Error", JOptionPane.ERROR_MESSAGE );
                       }
                       try {
                           statement.close();
                       } catch (SQLException e2) {
                           e2.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                       }

                       /*try {
                           tableModel.setQuery (txt);
                       } catch (SQLException e1) {
                           JOptionPane.showMessageDialog(null, e1.toString(), "Database error", JOptionPane.ERROR_MESSAGE );
                       } */
                   }
               });
               Container cont = query.getContentPane();
               Box box = Box.createHorizontalBox();
               box.add(scrollPane);
               box.add(but);
               JPanel top = new JPanel();
               top.setLayout(new BorderLayout());
               top.add(box, BorderLayout.CENTER);
               top.add(queryLabel, BorderLayout.NORTH);
               JTable resultTable = new JTable();
               JPanel bottom = new JPanel();
               JLabel resultsLabel = new JLabel("Results");
               bottom.setLayout(new BorderLayout());
               bottom.add(resultTable, BorderLayout.CENTER);
               bottom.add(resultsLabel, BorderLayout.NORTH);
               JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
               cont.add(splitPane, BorderLayout.CENTER);
               splitPane.setTopComponent(top);
               splitPane.setBottomComponent(bottom);

               Toolkit kit =Toolkit.getDefaultToolkit();
           Dimension screenSize = kit.getScreenSize();
           int screenHeight = screenSize.height;
           int screenWidth = screenSize.width;
           query.setLocation(screenWidth/4,screenHeight/4);
           query.setSize(screenWidth/2,screenHeight/2);
           query.setVisible(true);

           } catch (Exception e) {
               JOptionPane.showInternalMessageDialog(null, e.toString(), "Database Error", JOptionPane.ERROR_MESSAGE);   //To change body of catch statement use File | Settings | File Templates.
           }




    }

    public static void main(String[] args) {

        Query obj = new Query();
        obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}



класс Connect:
Код

public class Connect extends JFrame {
    private Connection con ;
    public Connect(){
            super();

            final JFrame win = new JFrame("Connect");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JPanel pan = new JPanel(new GridLayout(4,2));
            pan.add(new Label("Connect url"));
            final JTextField txt1 = new JTextField();
            pan.add(txt1);
            pan.add(new Label("Username"));
            final JTextField txt2 = new JTextField();
            pan.add(txt2);
            pan.add(new Label("Password"));
            final JTextField txt3 = new JTextField();
            //txt3.setEchoChar('*');
            pan.add(txt3);
            JButton but1 = new JButton("OK");
            but1.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e) {

                     try {
                        String conurl = txt1.getText();
                        String user = txt2.getText();
                        String pas = txt3.getText();
                        Class.forName ("com.mysql.jdbc.Driver");
                        try{
                        con = DriverManager.getConnection(conurl,user,pas);
                         }catch (Exception f){
                            

                             f.printStackTrace();
                            /*  if (con!=null){
                                  JFrame error = new JFrame("Error");
                                  Container cont =error.getContentPane();
                                  JPanel pan = new JPanel();
                                  JLabel label = new JLabel("Success=))");
                                  pan.add(label);
                                  cont.add(pan, BorderLayout.CENTER);
                                  error.setSize(300,100);
                                  error.setLocation(512,384);
                                  error.setVisible(true);
                         }

                              if (con==null){
                                  JFrame error = new JFrame("Error");
                                  Container cont =error.getContentPane();
                                  JPanel pan = new JPanel();
                                  JLabel label = new JLabel("Not Success=((");
                                  pan.add(label);
                                  cont.add(pan, BorderLayout.CENTER);
                                  error.setSize(300,100);
                                  error.setLocation(512,384);
                                  error.setVisible(true);
                              }  */
                        }

                     } catch (Exception ei) {

                         ei.printStackTrace();

                     }
                    win.dispose();
                }

            });
            JButton but2 = new JButton("Cancel");
            but2.addActionListener(new ActionListener (){

                public void actionPerformed(ActionEvent e) {

                    System.exit(0);

                }
            });

            pan.add(but1);
            pan.add(but2);
            Container cont = win.getContentPane();
            cont.add (pan, BorderLayout.CENTER);
            win.setSize(400,150);
            Toolkit kit = Toolkit.getDefaultToolkit();
            Dimension screenSize = kit.getScreenSize();
            int screenHeight = screenSize.height;
            int screenWidth = screenSize.width;
            win.setLocation(screenWidth/4,screenHeight/4);
            win.setVisible(true);

        }
    public Connection getConnection(){
        return con;
    }    
}


 
PM MAIL   Вверх
batigoal
Дата 5.5.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Собственно, у тебя тут вообще не создается соединение. Ты создаешь новое окно, и только:
Код

Connect obj = new Connect();

После этого программа не станет дожидаться, пока ты нажмешь там ОК. Она благополучно пойдет дальше, к твоему println'у. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Listad
Дата 5.5.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как тогда сделать? Я что-то плохо врубаюсь.... smile 
 
PM MAIL   Вверх
batigoal
Дата 5.5.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



А это смотря что ты хочешь получить. Наверное, так:
1. При выборе пункта меню Connect отображается твоё окошко (модальное, т.е. главное окно блокируется).
2. При нажатии OK вызывается какой-нибудь метод setConnection в главном окне, при этом ему передаются параметры из окошка. 


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Listad
Дата 5.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я ещё плохо разбираюсь, но похоже да smile

Добавлено @ 16:37 
Мне посоветовали сделать через JDialog, но я не могу разобраться с ним. smile  Поэтому решил спросить совета у вас...

Добавлено @ 16:38 
Как не меняя код на JDialog  реализовать задумку? 
PM MAIL   Вверх
Listad
Дата 5.5.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А не могли бы вы по конкретнее написать, что сделать? Хотелось бы увидеть код, чтобы понять получше.... 
PM MAIL   Вверх
LSD
Дата 5.5.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Используй JOptionPane:
Код
int result = JOptionPane.showOptionDialog( 
            parentFrame,
            loginPanel,
            "Ttitle",
            JOptionPane.DEFAULT_OPTION,
            JOptionPane.INFORMATION_MESSAGE,
            null,
            buttonsNames,
            defaultButtonName
        );
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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