[NetBeans] NullPointerException - aplikacja łącząca się z mysql

Odpowiedz Nowy wątek
2018-12-29 16:42
0

Witam,

Posiadam następujący problem: chciałbym napisać aplikację która będzie łączyła się z mysql, za pomocą której będę mógł uzupełniać bazę danych. Obecnie utnąłem na rejestracji użytkownika (moim założeniem jest wpisywanie w aplikacji imienia,nazwiska,loginu,hasła i avatara aby uzupełnić bazę danych w mysql o kolejnego użytkownika). Mianowicie aplikacja kompiluje się bez błędów, lecz gdy już wpiszę wszystkie dane do rejestracji i klikam button 'Utwórz konto' aplikacja wywala następujący błąd:

run:
com.mysql.jdbc.Driver
gru 29, 2018 4:31:09 PM dolacz jButtonUtworzActionPerformed
SEVERE: null
java.lang.NullPointerException
    at dolacz.jButtonUtworzActionPerformed(dolacz.java:376)
    at dolacz.access$200(dolacz.java:26)
    at dolacz$3.actionPerformed(dolacz.java:142)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

BUILD SUCCESSFUL (total time: 16 seconds)

program nie reaguje a baza danych w mysql również pusta

Cały kod znajdujący się pod przyciskiem wygląda następująco:

    private void jButtonUtworzActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // Procedura rejestracji użytkownika

        Connection con = mojePolaczenie.getConnection();
        PreparedStatement ps;

        try {
            ps = con.prepareStatement("INSERT INTO userzy(imie, nazwisko, nazwa, haslo, zdj)" + "VALUES (?,?,?,?,?)" );
            ps.setString(1, jTextFieldImie.getText()); 
            ps.setString(2, jTextFieldNazwisko.getText());
            ps.setString(3, jTextFieldNazwa2.getText());
            ps.setString(4, String.valueOf(jPasswordFieldHaslo2.getPassword()));

            InputStream img = new FileInputStream(new File(imagePth));

             ps.setBlob(5,img);

             if(ps.executeUpdate() != 0){
                 JOptionPane.showMessageDialog(null, "Konto zalozone");
             }else{
                 JOptionPane.showMessageDialog(null, "Cos jest zle");
             }
        } catch (Exception ex) {
            Logger.getLogger(dolacz.class.getName()).log(Level.SEVERE, null, ex);
        }
    }  

natomiast sam błąd kompilator wskazuje na linijce

ps = con.prepareStatement("INSERT INTO userzy(imie, nazwisko, nazwa, haslo, zdj)" + "VALUES (?,?,?,?,?)" );

Czy jest w stanie ktoś z państwa wytłumaczyć mi co jest nie tak? :)
Pozdrawiam

edytowany 1x, ostatnio: Dawid Maciaszek, 2018-12-29 16:45

Pozostało 580 znaków

2018-12-29 17:34
0
  1. Co to za klasa "mojePolaczenie"? Jak ją inicjalizujesz?
  2. Jak odpalisz debbugger to "Connection con" ma jakąś wartość czy jest nullem?

Pozostało 580 znaków

2018-12-29 17:44
0

1.


import java.sql.Connection;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class mojePolaczenie {

    public static Connection getConnection(){

        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/javarezerwacja", "root", "");
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

        return con;
}
}
  1. Connection con jest nullem co właśnie zauważyłem wklejając kod klasy mojePolaczenie, co powinienem zmienić?
edytowany 1x, ostatnio: Dawid Maciaszek, 2018-12-29 17:44

Pozostało 580 znaków

2018-12-29 17:49
0
  1. Nazwy klas zapisuje się w konwencji camelcase począwszy od dużej litery, u ciebie powinna się nazywać MojePolaczenie, przez brak konwencji myślałem że "mojePolaczenie" to obiekt klasy.
  2. Class.forName("com.mysql.jdbc.Driver"); po co to?
  3. Nie dostajesz przypadkiem żadnego wyjątku w w println(), np. SQLException?
edytowany 2x, ostatnio: CountZero, 2018-12-29 17:53

Pozostało 580 znaków

2018-12-29 18:01
0
  1. Zostało automatycznie importowane gdy użyłem try catch
  2. Jak mogę to sprawdzić?
    Wybacz za głupie pytania ale jestem bardzo początkujący w temacie

Pozostało 580 znaków

2018-12-29 18:40
0
  1. Linijka niepotrzebna, nic nie robi u ciebie.
  2. Zobacz po prostu czy w konsoli nie wypisuje ci żadnego błędu :). Ewentualnie wywal try/catch, dodaj "throws' do wszystkich metod i zobacz czy aplikacja działa normalnie.
2. robi - jest to głupi, ale jednak idiom JDBC - piotrpo 2018-12-29 21:26
Serio? Po co to jest? - CountZero 2018-12-29 21:47
Teraz rozumiem, "super" pomysł by ładować sterownik w bloku statycznym. Ale z tego co pisali na so jest to już legacy na szczęście. - CountZero 2018-12-29 22:00

Pozostało 580 znaków

2018-12-29 20:32
0

Strzelam - a masz lokalnie na kompie włączoną usługę bazy danych MySQL? :)

Pozostało 580 znaków

2018-12-29 20:55
0

Tak, korzystam z xamppa

Jutro spróbuję z tym throwsem pokombinować :)

Pozostało 580 znaków

2018-12-29 21:37
0
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/javarezerwacja", "root", "");

Pierwotna przyczyna błędu jest w którejś z tych linijek. Albo nie masz dołączonej biblioteki sterownika JDBC do MySQL, albo z jakiegoś powodu serwer odrzuca połączenia. Żeby wiedzieć więcej, musisz zobaczyć co jest w wyjątku. Zamień:

System.out.println(ex.getMessage());

na

ex.printStackTrace();

I zobacz co ci w się w logu pokaże.

Pozostało 580 znaków

2019-01-05 16:25
0

Po zmianie

run:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at mojePolaczenie.getConnection(mojePolaczenie.java:14)
    at dolacz.jButtonUtworzActionPerformed(dolacz.java:372)
    at dolacz.access$200(dolacz.java:26)
    at dolacz$3.actionPerformed(dolacz.java:142)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
sty 05, 2019 4:24:06 PM dolacz jButtonUtworzActionPerformed
SEVERE: null
java.lang.NullPointerException
    at dolacz.jButtonUtworzActionPerformed(dolacz.java:376)
    at dolacz.access$200(dolacz.java:26)
    at dolacz$3.actionPerformed(dolacz.java:142)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

BUILD SUCCESSFUL (total time: 32 seconds)

Pozostało 580 znaków

2019-01-05 17:31
0
piotrpo napisał(a):
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/javarezerwacja", "root", "");

Pierwotna przyczyna błędu jest w którejś z tych linijek. Albo nie masz dołączonej biblioteki sterownika JDBC do MySQL, albo z jakiegoś powodu serwer odrzuca połączenia. Żeby wiedzieć więcej, musisz zobaczyć co jest w wyjątku. Zamień:

System.out.println(ex.getMessage());

na

ex.printStackTrace();

I zobacz co ci w się w logu pokaże.

Ten post rozwiązał mój problem ponieważ po zmianie na ex.printStackTrace(); program stwierdził że nie widzi com.mysql.jdbc.Driver, więc użyłem innej wersji sterownika jdbc i śmiga :) Temat do zamknięcia.

to daj mu łapkę w górę i oznacz posta jako "zaakceptowany" :) - Pinek 2019-01-05 18:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0