Java/mySql/error 500

0

Witam,

stworzyłam aplikację w której łączę się z bazą danych na lokalnym komputerze póki co. Problem pojawia się podczas wywałania głównej strony, w której mam odwołanie do servletu: error 500, wyjątek:

java.lang.NullPointerException

Korzystam z wzorca projektowego mvc, błąd zlokalizowałam za pomocą wywołania programu. Pojawia się dokładnie w linijce: statement = con.createStatement(); . Wstawiam wycinek kodu:

Connection con = null;
Statement statement = null;
ResultSet resultSet = null;
  
String loginDB = "root";
String passDB = "";
  
try
 {
 con = DBConnection.createConnection(); 
 statement = con.createStatement();  
 resultSet = statement.executeQuery("SELECT login, pass FROM users"); 
  
  loginDB = resultSet.getString("login");
  passDB = resultSet.getString("pass");

Problem łączy się z kolejną klasą oczywiście, jak to w MVC, wszystko ze sobą powiązane:

try {
        String login = request.getParameter("login");
        String  pass = request.getParameter("pass");
         
        LoginBean loginBean = new LoginBean();  
        loginBean.setLogin(login); 
        loginBean.setPass(pass);
        LoginDao loginDao = new LoginDao(); 
 
        String userValidate = loginDao.authenticateUser(loginBean);
         
        if(userValidate.equals("SUCCESS")) 
        {
            request.setAttribute("login", login);
            request.getRequestDispatcher("Przekierowanie1.jsp").forward(request, response);
        }
        else
        {
            request.setAttribute("errMessage", userValidate); 
            request.getRequestDispatcher("welcomeJSF.jsp").forward(request, response);
        }  } catch (SQLException ex) {
        Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);

Proszę o pomoc, jakieś pomysły? :) Potrzebuję obiektywnego spojrzenia na kod, męczę się nad nim 2 dni i już nic nie widzę :) Byłabym baaaaaaardzo wdzięczna! :)

0

Błąd 500 to błąd po stronie serwera i na tej podstawię mogę Ci powiedzieć że coś jest nie tak. Jak podasz wyjątek wraz z treścią wiadomości to może da się to nawet zawęzić.

0

Oto mój error:

type: Exception report

message: Internal Server Error

description:The server encountered an internal error that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException

note: The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.
1

NullPointerException oznacza że działasz na referencji która jest ustawiona na null, a nie że obiekt jest pusty.

 con = DBConnection.createConnection(); 

Tutaj jest problem, a dokładnie to DBConnection.createConnection() zwraca Ci null zamiast połączenie do bazy.

0

import java.sql.Connection;
import java.sql.DriverManager;
 
public class DBConnection {
 
public static Connection createConnection()
 {
 Connection con = null;
 String url = "jdbc:mysql://127.0.0.1:3306/users";
 String login = "root";
 String pass = ""; 
 
try
 {
 try
 {
 Class.forName("com.mysql.jdbc.Driver");// differs from DB server to server
 }
 catch (ClassNotFoundException e)
 {
 }
 
con = DriverManager.getConnection(url, login, pass);
 
}
 catch (Exception e)
 {
 }
 
return con;
 }
 }
1

Podstawowym i bardzo poważnym błędem jaki robisz jest ukrywanie wyjątków.

con = DriverManager.getConnection(url, login, pass);

Tutaj coś poszło nie tak, ale zignorowałaś to i działasz dalej. Użyj jakiegoś loggera i jeżeli nie wiesz co zrobić z wyjątkiem, to chociaż na początku go loguj. Przynajmniej będziesz wiedziała że coś jest nie tak. Jak logger to jeszcze za dużo, to użyj chociaż System.err.println(), ale nie ignoruj.

Kod:

 try
 {
 Class.forName("com.mysql.jdbc.Driver");// differs from DB server to server
 }
 catch (ClassNotFoundException e)
 {
 }

Jest zbędny i nie robi nic. Ale tutaj też ukrywasz wyjątek.

0

Dobra, ja nadal obstawiam żebyś poszukała sobie bogatego męża, a nie bawiła się w jave, @Shalom ? Wy w CERN'nie pewnie nieźle zarabiacie.

Ale do rzeczy, jak tamto cudo ci nie działa (stworzone przy pomocy zaczarowanego ołówka ?? ), napisz od nowa, nie będzie to wielka strata wywalić tamto.

        System.out.println("-------- MySQL JDBC Connection Testing ------------");

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Where is your MySQL JDBC Driver?");
            e.printStackTrace();
            return;
        }

        System.out.println("MySQL JDBC Driver Registered!");
        Connection connection = null;

        try {
            connection = DriverManager
                    .getConnection("jdbc:mysql://localhost:3306/test","root", "root");

        } catch (SQLException e) {
            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return;
        }

        if (connection != null) {
            System.out.println("You made it, take control your database now!");
        } else {
            System.out.println("Failed to make connection!");
        }

To coś wyżej, łączy się bazą danych, (dla mnie baza danych: test login root haslo root - i nie sabina, nie shakujesz mi tym kompa).

Oczywiście masz do classpatha wrzucone jarki ?? http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.6
Tak więc teraz, z czym masz problem ?

0
  1. Łykanie wyjątków i puste bloki catche to jest WTF. Szczególnie ze IDE samo ci weneruje te bloki z e.printStackTrace(). Po coś je usuwała? o_O
  2. Zgaduje że nie dodałaś do projektu jara z driverem do MySQL
  3. Ten kod który pokazałaś z MVC nie ma absolutnie nic wspólnego. Chyba że klepiesz w wersji 3w1 ;]
0

Jaki cwaniak, któremu się wydaje, że wszystkie rozumy pozjadał! Dziękuję bardzo, niestety Twój program nie jest lepszy, error ten sam - no, ale jeśli chodziło z Twojej strony o pokazanie swojego wielkiego ego (musisz być bardzo zakompleksionym facetem) to gratuluję - udało się! Przypominam, że forum służy do POMOCY. Życzę powodzenia.

3

@magdalenka120 Jeżeli coś nie działa i masz logger podpięty, to w logach odkładają Ci się błędy. Wklej je tutaj, najlepiej ze stacktracem i to nam powie gdzie jest błąd.

@niezdecydowany @karolinaa @Shalom Mam wrażenie że urwaliście się z gimnazjum. Widać że ona dopiero raczkuje w programowaniu i nie będzie pisać kodu super jakości jak dopiero się uczy. Jak rozumiem wy zanim napisaliście hello world, przeczytaliście effective java, clean code itp? Gratuluję postawy.

@Shalom No nie gadaj że gościu który wymiata i pracuje w CERNie zadał pytanie na większym poziomie niż osoba zaczynająca. Nikt się tego nie spodziewał!

@Tumeg @Shalom Reputacja 4p nie jest jaka jest przez wypowiedzi @magdalenka120, tylko przez całe wyśmianie kodu przez wyjadaczy.

Ostatnio na forum ktoś przytoczył cytat czy tam parafrazę

Nie ma głupich pytań. Są tylko głupie odpowiedzi.

A ten temat jest dowodem że jest to prawda.

2

@krzysiek050 To nie poziom pytania jest ważny a sposób jego zadania. Jak ktoś przychodzi i wrzuca taki kod i jedyna informacja jaką uzyskujemy to "nie działa mi" to jest to zwyczajny brak szacunku dla osób od których oczekujesz odpowiedzi. Wiesz czemu owiane chwałą stackoverflow ma "wyższy poziom"? Bo takie tematy automatycznie są usuwane. Jeśli temat od razu nie ma pełnych informacji w pierwszym poście to leci w niebyt i nikt po nim nie płacze. Autorka ewidentnie nie zadała sobie trudu żeby samemu spróbować ten problem zrozumieć. Twierdzi że męczy się z tym 2 dni, a ja myśle że od 2 dni ma błąd, ale nic z nim nie zrobiła. Bo ktoś przez 2 dni nie odpalił debugera? Nie pomyślał żeby jednak wypisać wyjątki? To co niby robiła przez te 2 dni? Ten kod to 30 linijek!

Spróbuj kiedyś zadzwonić do mechanika i powiedzieć nie działa mi auto, jak to naprawić? i jeszcze powiedz że jeżdżę w stoperach na uszach i z zamkniętymi oczami więc nie wiem czy coś sygnalizuje problem, ale auto nie jedzie!. A jak ci mechanik zaproponuje żeby wyjąć stopery i otworzyć oczy a ty mu zaraz odpowiadasz: Jaki cwaniak, któremu się wydaje, że wszystkie rozumy pozjadał! Dziękuję bardzo, niestety samochód dalej nie działa mimo że mam otwarte oczy i wszystko słyszę!.

@magdalenka120 my na prawdę chcemy ci pomóc, ale nikt tu nie ma szklanej kuli ani nie para się wróżeniem z fusów. Pokaż choćby co wypisał ci kod kolegi @niezdecydowany. My wiemy że ten kod też się wysypał i na koniec wyrzucił nullpointerexception. Miał tak zrobić! Ale oprócz tego wypisał też inne rzeczy dzięki którym mozemy ci pomóc. Ale musimy je najpierw zobaczyć.

0

@krzysiek050 Program działa, poradziłam sobie - diabeł tkwi w szczegółach jak to mówią, z pośpiechu dodałam źle drivera służącego do komunikacji z MySql - mały, wielki błąd, dodatkowo zamiast id = 'nazwa' powinno być name = 'jakaś nazwa' i .. Wszystko śmiga :) Dziękuję Ci bardzo za pomoc i za to, co napisałeś :) Pozdrawiam serdecznie!

0
Shalom napisał(a):

To nie poziom pytania jest ważny a sposób jego zadania. Jak ktoś przychodzi i wrzuca taki kod i jedyna informacja jaką uzyskujemy to "nie działa mi" to jest to zwyczajny brak szacunku dla osób od których oczekujesz odpowiedzi.

To nie jest brak szacunku. Jeżeli jest studentką, to możliwe że zaczynała od C, a tam nie ma wyjątków i wielu studentów (Ja też w przeszłości), nie wiedziałem jak dużą rolę grają i jak ułatwiają. Wykładowcy tłumaczą też aspekty techniczne wyjątków, ale nie mówią co z nimi zrobić. Serio aż tak niewiedza innej osoby ubodła twoją godność? Nie lepiej powiedzieć tej osobie jak ma szukać błędów i jak radzić sobie w przyszłości? Czy może tutaj na forum jest jakaś magiczna granica od której można zadawać pytania, a poniżej jej można liczyć tylko na obelgi?

Shalom napisał(a):

Spróbuj kiedyś zadzwonić do mechanika i powiedzieć nie działa mi auto, jak to naprawić?
Super przykład, bo na naprawie samochodów się nie znam. Jak zadzwonię do mechanika i powiem że coś mi stuka w kole (ona powiedziała co nie działa), to mnie poinstruuje gdzie mam postukać, popukać i zobaczyć czy trzeszczy. Nie powie mi że jak nie rozbiorę amortyzatora to mam iść się walić i w ogóle to głupi jestem. Twoja analogia z zatyczkami do uszu jest nietrafiona, bo jak ktoś tutaj zadaje pytanie że "coś mi nie działa", bez kodu to zawsze pozostaje bez sensownej odpowiedzi. Ale tutaj był kod i punkt zaczepienia. Ona nie chciała gotowca, tylko pomoc. Dlatego mimo niewielkiej wiedzy na temat programowania należała jej się pomoc.

0

Czy może tutaj na forum jest jakaś magiczna granica od której można zadawać pytania

Tak, cytując regulamin serwisu:

Zanim opublikujesz wątek/post na forum jesteś zobowiązany:
Sprawdzić, czy odpowiedź na Twoje pytanie nie znajduje się w materiałach umieszczonych w tym serwisie.
Upewnić się (korzystając z wyszukiwarki) czy podobne pytanie nie było wcześniej zadane.
Poszukaj w pomocy/podręczniku, czy odpowiedź na Twoje pytanie nie znajduje się właśnie tam.
Temat wątku powinien w sposób sensowny i w miarę wyczerpujący opisywać Twój problem. Tak, aby potem wyszukiwarki nie miały kłopotu ze znalezieniem szukanego tekstu. Wątki opatrzone jednowyrazowym tematem, lub zdaniem nie opisującym zupełnie problemu, będą usuwane.
Sam post powinien w sposób jak najbardziej precyzyjny opisywać problem.

Jeśli ktoś zakłada wątek nie stosując się do tych zaleceń to nie powinien liczyć na sensowne odpowiedzi. Gdyby koleżanka poświęciła 5 minut z google szukając pod hasłami "how to debug java program" to zaraz by się dowiedziała żeby jednak sprawdzać jakie wyjątki lecą po drodze.

Jak zadzwonię do mechanika i powiem że coś mi stuka w kole (ona powiedziała co nie działa)

O RLY? To chyba na jakimś waszym prywatnym rendez-vous ci powiedziała co nie działa. Bo ja widzę tylko informacje że nullpointerexeption, który w Javie oznacza tyle że "coś jest nie tak" ;]

0
Shalom napisał(a):

Jeśli ktoś zakłada wątek nie stosując się do tych zaleceń to nie powinien liczyć na sensowne odpowiedzi.
Wiesz że oprócz senswonej i bezsensownej odpowiedzi jest jeszcze wstrzymanie się od głosu? Skoro ktoś stara się pomóc, bo nie poczuł się urażony tak banalnym pytaniem, to chociaż nie przeszkadzaj.

Shalom napisał(a):

Gdyby koleżanka poświęciła 5 minut z google szukając pod hasłami "how to debug java program" to zaraz by się dowiedziała żeby jednak sprawdzać jakie wyjątki lecą po drodze.
A ona zamiast tego zrobić zadała pytanie i uzyskała podpowiedź jak ma szukać. Te parę kilobajtów w bazie danych naprowadziło ją i podbudowało wasze ego. Nie opłacało się?

Shalom napisał(a):

O RLY? To chyba na jakimś waszym prywatnym rendez-vous ci powiedziała co nie działa. Bo ja widzę tylko informacje że nullpointerexeption, który w Javie oznacza tyle że "coś jest nie tak" ;]
Oprócz typu wyjątku, powiedziała w której lini leci. A to naprowadziło na problem z połączeniem. Przeczytaj cały temat jeszcze raz to zostaniesz włączony do naszego prywatno-publicznego randez-vous.

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