• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Baza danych i Java

VPS Starter Arubacloud
0 głosów
896 wizyt
pytanie zadane 5 lipca 2018 w Java przez Patryk8090 Użytkownik (520 p.)
zamknięte 9 lipca 2018 przez Patryk8090

Witam. Postanowiłem nauczyć się korzystania z bazy danych w Javie, ponieważ dużo pracodawców tego oczekuje. (no bo dlaczego mam sobie życia nie ułatwić? :D ) No to pisze. Mam prosty kodzik. Ale też mam problem. Połączenie z bazą jest, etc. Tylko ona nie wyświetla. I przychodzę do was z nadzieją, że wytłumaczycie mi dlaczego nie wykonuje swojego zadania. Dzięki wielkie! Pozdrawiam.

 

import javax.swing.*;
import java.sql.*;

public class Driver {

    static String dataBase;

    static String link = "jdbc:mysql://localhost:3306/demo";
    static Connection connection = null;
    static String query = "select * from test";

    public static void main(String args[]){
        try {
            connection = DriverManager.getConnection(link, "root", "12345"); // <- set connection
            Class.forName("com.mysql.jdbc.Driver"); // <- driver

            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(query);

            while (resultSet.next()) {
                Show(resultSet);
            }

        }catch (ClassNotFoundException e){
            System.out.println("class not found");
        }catch (SQLException e){
            System.out.println("error sql: " + e);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static void Show(ResultSet rs){

        try{
                dataBase = rs.getString(1);
                JOptionPane.showMessageDialog(null, dataBase);
                dataBase = rs.getString(2);
                JOptionPane.showMessageDialog(null, dataBase);
                dataBase = rs.getString(3);
                JOptionPane.showMessageDialog(null, dataBase);
                dataBase = rs.getString(4);
                JOptionPane.showMessageDialog(null, dataBase);

        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

 

komentarz zamknięcia: Pytanie zostało rozwiązane.
komentarz 5 lipca 2018 przez Tomasz Rogalski Bywalec (2,800 p.)
Próbowałeś zamienić JOptionPane.showMessageDialog  na System.out.println? Oczywiście w celu diagnostycznym. Będziemy wiedzieli czy to z dialogiem coś nie tak czy z czymś innym.
komentarz 5 lipca 2018 przez Patryk8090 Użytkownik (520 p.)
Najpierw było System.out.println(). Program się wykonał bez błędnie ale nic nie wyświetlił

1 odpowiedź

0 głosów
odpowiedź 6 lipca 2018 przez Tomasz Rogalski Bywalec (2,800 p.)

Czyli mamy problem, że baza nie zaciąga poprawnie danych. Próbowałeś:

rs.getInt("id") zamiast z tymi cyframi 1/2/3/4?

Po za tym w javie metody piszemy z małej. A po catch napisz finally{

 conn.close();

} albo użyj try-with-rsources

komentarz 8 lipca 2018 przez Patryk8090 Użytkownik (520 p.)
Wiem, przyzwyczajenie takie mam już, że pisze z duzych. Nawet lepiej mi się patrzy, które są moje a które są z bibliotek Javy.
Co do problemu. Nie działa dalej. Nawet zauważyłem jakby metoda się w ogóle nie wykonywała.
komentarz 8 lipca 2018 przez Patryk8090 Użytkownik (520 p.)

a jak wyciągam metodę z pętli powstaje taki błąd:

 

java.sql.SQLException: Illegal operation on empty result set.
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
	at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790)
	at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2475)

 

komentarz 9 lipca 2018 przez Tomasz Rogalski Bywalec (2,800 p.)
class Example {

    static String dataBase;

    static Connection connection = null;
    static String query = "select * from test";

    public static void main(String args[]) {
        try {
            connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "hasło");
            Class.forName("org.postgresql.Driver");

            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(query);

            while (resultSet.next()) {
                show(resultSet);
            }

        } catch (ClassNotFoundException e) {
            System.out.println("class not found");
        } catch (SQLException e) {
            System.out.println("error sql: " + e);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void show(ResultSet rs) {

        try {
            System.out.println(rs.getLong(1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Użyłem twojego kodu tyle że na innej bazie (postgresql) i działa.
Pytanie do Ciebie: co znaczy że nie wyświetla? Robisz selecta na odpowiedniej bazie? Bo to już ustaliliśmy, kod jest w porządku. Szukaj błędu gdzieś bardziej w stronę bazy.

komentarz 9 lipca 2018 przez Patryk8090 Użytkownik (520 p.)

Ja.... bazę źle zrobiłem surprise

nie było tematu! Dzięki za pomoc !

komentarz 9 lipca 2018 przez Tomasz Rogalski Bywalec (2,800 p.)
Ciesze się że się wyjaśniło. Zamknij temat:)

Podobne pytania

0 głosów
1 odpowiedź 457 wizyt
0 głosów
1 odpowiedź 213 wizyt
pytanie zadane 2 marca 2019 w PHP przez Kedholt Początkujący (480 p.)
0 głosów
1 odpowiedź 416 wizyt
pytanie zadane 10 lutego 2019 w SQL, bazy danych przez veryape Użytkownik (580 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...