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

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

0
  1. Co to za klasa "mojePolaczenie"? Jak ją inicjalizujesz?
  2. Jak odpalisz debbugger to "Connection con" ma jakąś wartość czy jest nullem?
0

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ć?
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?
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
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.
0

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

0

Tak, korzystam z xamppa

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

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.

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)

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.

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