Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Java > Java + Sql


Автор: Nort0n 14.11.07, 21:40
Вообщем есть такой вопрос. Я не знаю, как его корректо задать без ПОЛНОГО кода, но всё же попытаюсь. есть метод, который по нажатию кнопки должен добавлять в БД сервера Юзера. Естественно, коннект работает, проверяли. Добавление из консоли так же работает. Проверяли. а вот через форму не работает. Причём выдаёт : Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Authorization.InsertUser.actionPerformed(Workspace.java:131)
как я понимаю, выброшено прерывание в строчке 131

ВОт метод, срабатывающий по нажатию кнопки:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     public void actionPerformed(ActionEvent e)
         {
          
          try{
           DB_root cd = new DB_root();
           Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
           ResultSet rs;
           //Creates users table
           if (!cd.TableExists("users", conn))
           {
            System.out.println("Create table Users "+
              !st.execute("CREATE TABLE Users ( " +
               "Id INT PRIMARY KEY," +
               " Name CHAR(20) ," +
               " SurName CHAR(20)," +
               " TNumber CHAR(9),"));
            id =1;
           }else
           {
             rs =  st.executeQuery("SELECT id FROM users");
             rs.last();
             id= rs.getInt(1)+1;
             rs.close();
           }
            query = "INSERT INTO Users VALUES ('"+id+"' , '"+name.getText()+"' , '"+sname.getText()+"' , '"+tel.getText()+"')";  
            //Id_text.setText("Added. ID: "+id);
            System.out.println("Add "+!st.execute(query)+" id: "+id);
              
          
          }
          catch (SQLException e1)
          {
           System.out.println("InsertUser");
           e1.printStackTrace();
          }
          
         }


Честно говоря, тяжело понять, что не верно. ВОзможно ошибка идёт при взаимодействии между пакетами? ПОтому что коннект к серверу лежит в другом пакете. (Fill_Up_Table/DB_root) - но я его подключаю. Я понимаю, что без всего кода трудно понять, что к чему, но его там очень много

Автор: Konigsberg 14.11.07, 21:47
Nort0n, а какая строчка 131??? :)

Автор: Nort0n 14.11.07, 21:50
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     " TNumber CHAR(9),"));
            id =1;
           }else   // 131
           {

Автор: Konigsberg 14.11.07, 22:00
Даже не знаю, каким чудом эксепшен может лететь в строке с else. Я по крайней мере ничего не могу сказать и того куска кода, что ты выложил :(

Автор: Nort0n 14.11.07, 22:01
я подозреваю, что это глюк драйвера. сейчас, попытаюсь разобраться

я приложу зипушник проекта, к сообщению. но без драйвера и вставшего postgree работать то всёравно не будет

проект - сырцы, разрозненные куски и каменты, так что прошу строго не судить. коннект работал по крайней мере вчера :)

Автор: DUKe 14.11.07, 23:12
1) скачал код, 131 строка это пустая строка, а не else.
И вообще приведенного куска кода в посте №3 в исходниках нет.

2) вы хоть какую-нибудь книжку бы по джаве почитали, как что называть, зачем классы нужны..

3) дебаггером проходить пробовали?

Автор: Konigsberg 15.11.07, 01:45
Да, кстати, Nort0n, подтверждаю, 131 строчка - пустая, вы уж там как-нить определитесь, хотя бы в какой строчке летит эксепшн :)

Автор: Nort0n 15.11.07, 06:29
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    И вообще приведенного куска кода в посте №3 в исходниках нет.


:blink: подтверждаю, но приведённый кусок кода это чуть модифицированный метод ActionPerformed. оба должны работать

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    2) вы хоть какую-нибудь книжку бы по джаве почитали, как что называть, зачем классы нужны..


заколебали. вы думаете я написал всё это с нуля, не читая никаких книжек по джаве?

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    3) дебаггером проходить пробовали?

пробовали.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Да, кстати, Nort0n, подтверждаю, 131 строчка - пустая, вы уж там как-нить определитесь, хотя бы в какой строчке летит эксепшн

я же не с потолка взял эту цифру. у меня при компилляции ексепшн летит в строке 131.
если она пустая, тогда скажите мне, в каких сслучаях возможно возникновение прерывания в пустой строчке кода

Автор: zera 15.11.07, 06:55
Цитата Nort0n @
я же не с потолка взял эту цифру. у меня при компилляции ексепшн летит в строке 131.
если она пустая, тогда скажите мне, в каких сслучаях возможно возникновение прерывания в пустой строчке кода

значит это мистика и проблема решается исключительно через пляски с бубном
а вообще вы уверены, что вы приложили именно тот код, ошибку от которого дали? откройте свой же архив у себя и сверьте количество пустых строк. кстати, а таблица существует? иначе query1 у вас равна "".

Автор: mrco 15.11.07, 07:12
Поставте:
System.out.println( cd+" "+st+" "+conn);
перед первым ифом.

Автор: Nort0n 15.11.07, 07:23
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    а вообще вы уверены, что вы приложили именно тот код, ошибку от которого дали? откройте свой же архив у себя и сверьте количество пустых строк. кстати, а таблица существует? иначе query1 у вас равна "".


нет, приложен старый проект. извиняюсь, сейчас исправлю ошибку.
таблица прверяется на существование первым ифом

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Поставте:
    System.out.println( cd+" "+st+" "+conn);
    перед первым ифом.


ничего не вывел

Автор: DUKe 15.11.07, 07:31
Цитата Nort0n @
пробовали.

и каков результат? в каком мой вылетело исключение, какой объект был null?


Цитата Nort0n @
заколебали. вы думаете я написал всё это с нуля, не читая никаких книжек по джаве?

может и читали, но явно поняли не все, или вы считаете, что в вашем коде очень приятно разбираться? Разбили бы все классы на отдельные файлы, авось и сами бы ошибку уже нашли

Автор: batigoal 15.11.07, 08:06
Nort0n, твой код я пока не запустил (времени маловато), но к вечеру постараюсь его переделать. Код у тебя, уж прости, плохой. Во-первых, ты не соблюдаешь соглашения об именовании. Имена переменных и методов должны начинаться с маленькой буквы, если в имени используются несколько слов - они выделяются заглавными буквами. Например, Draw_Auth_Frame должно быть написано как drawAuthFrame, а лучше - drawAuthorizationFrame. Во-вторых, многие имена просто неинформативны, и читать код тяжело. И наконец, разбиение на классы у тебя сделано не лучшим образом - я с ходу не сумел понять, какой класс какую роль выполянет.

Постараюсь выкроить время, и написать код, как я бы сделал его сам.

Автор: Grab[SSAU] 15.11.07, 08:16
честно говоря, я в коде ничего не понял :)

зачем создавать cd в InsertUser.actionPreformed(), если там все методы статические?
в Connect.TableExists() не закрывается ResultSet с метаданными

мне кажется, что Connection приходит null'овым

Автор: batigoal 15.11.07, 14:23
Nort0n, пвтаюсь разобраться, и мне это пока не удается. У тебя вызывается первая форма. При нажатии на OK, при условии, что мы ничего в поля не ввели, появляется вторая форма. Это правильно?

Автор: Nort0n 15.11.07, 17:25
Дааа, ребят всем спасибо, я разобрался. МОгу выложить исходник с указанием на мои тупые ошибки

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    зачем создавать cd в InsertUser.actionPreformed(), если там все методы статические?


событие нажатия кнопки


Вообщем, у меня была ошибка в синтаксисе. один из запросов был написан неверно с т.зрения языка Sql. я создавал таблицу Users но после прописывания столбцов у меня стояла какая то левая запятая, => таблица не создавалась. так же в методе по нажатию кнопки я не вызывал коннект к серверу. на самом деле выхзов коннекта по нажатию кнопки Add - в корне не верен, вызывать его нужно в Main'e сразу после отрисовки обоих форм.

Вот исходник, уже рабочий, всем спасибо за время, которое на меня потратили

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)