Postgres - dlaczego po kliknięciu w button wyświetla mi się tylko ostatnia linijka?

0

Witam na forum. Od miesiąca uczę się javy. Napisałem pewien program z obsługą bazy danych postgresa. Poniżej załączam kawałek kodu - w miejscu gdzie mam problem.

public void actionPerformed(ActionEvent e)
            {   
                Select select = new Select();
                pole.setText("imie=" +select.getImie());            
                pole.setText("nazwisko=" +select.getNazwisko());
            }

Nie wiem dlaczego po kliknięciu w button wyświetla mi się tylko ostatnia linijka, czyli nazwisko z bazy bez imienia.

0
public void actionPerformed(ActionEvent e)
            {   
                Select select = new Select();
                pole.setText("imie=" +select.getImie()+"\n");            
                pole.append("nazwisko=" +select.getNazwisko());
            }

Zakładam, że pole jest wielowierszowe (np. JTextArea) i chcesz wyświetlać w dwóch wierszach.
Jeśli to jest JTextField i chcesz wyświetlać w jednym wierszu, to:

public void actionPerformed(ActionEvent e)
            {   
                Select select = new Select();
                pole.setText("imie=" +select.getImie()+" nazwisko=" +select.getNazwisko());            
            }
0

można użyć też

pole.append("imie=" +select.getImie()+"\n"+"nazwisko=" +select.getNazwisko());            

w dwóch

0

Dziękuję za pomoc. Mam jeszcze jedno pytanie. Moja baza zawiera 6 osób. Po pobraniu listy wyświetla się tylko ostatnia osoba. Poniżej kod:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Select 
{
    private String imie;
    private String nazwisko;
    public Select ()
    {
        Connection c = null;
        Statement stmt = null;

        try
        {
            Class.forName("org.postgresql.Driver");
            c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/jacek","jacek", "zuza");
            c.setAutoCommit(false);
            System.out.println("Dostęp do bazy danych \n");

            stmt = c.createStatement();
            ResultSet rs = stmt.executeQuery( "select * from pracownicy;" );
            while ( rs.next() ) 
            {
                nazwisko = rs.getString("nazwisko");
                imie = rs.getString("imie");                    
            }   
            rs.close();
            stmt.close();
            c.close();
        }   
        catch ( Exception e )
        {
            System.err.println( e.getClass().getName()+": "+ e.getMessage() );
            System.exit(0);
        }       
        System.out.println("Zapytanie wykonano poprawnie \n");
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }
}

Jak można zrobić aby wyświetlane było wszystkie osoby?

0
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class Select 
{
    private ArrayList<String> imiona = new ArrayList<String>();
    private ArrayList<String> nazwiska = ArrayList<String>();
    public Select ()
    {
        Connection c = null;
        Statement stmt = null;

        try
        {
            Class.forName("org.postgresql.Driver");
            c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/jacek","jacek", "zuza");
            c.setAutoCommit(false);
            System.out.println("Dostęp do bazy danych \n");

            stmt = c.createStatement();
            ResultSet rs = stmt.executeQuery( "select * from pracownicy;" );
            while ( rs.next() ) 
            {
                nazwiska.add(rs.getString("nazwisko"));
                imiona.add(rs.getString("imie"));                    
            }    
            rs.close();
            stmt.close();
            c.close();
        }    
        catch ( Exception e )
        {
            System.err.println( e.getClass().getName()+": "+ e.getMessage() );
            System.exit(0);
        }        
        System.out.println("Zapytanie wykonano poprawnie \n");
    }

    public ArrayList<String> getImiona() {
        return imiona;
    }

    public ArrayList<String> getNazwiska() {
        return nazwiska;
    }
}
0

To nie jest dokładnie to, o co mi chodziło gdyż teraz wyświetlają się najpierw wszystkie imiona a potem nazwiska. Czy gdybym w miejsce dwóch tabli zastosował tablicę dwuwymiarową to uzyskałbym to, czego chcę? Szczerze mówiąc właśnie się do tego zabieram.

0

Tablica ma wady, musisz z góry wiedzieć ile jest osób. A wyświetla Ci się to co sobie wyświetlisz, a wyświetlasz źle.

pole.setText("");
for(int i=0;i<imiona.size();i++)
{
    pole.append("imię: "+imiona.get(i)+" nazwisko: "+nazwiska.get(i)+"\n");
}
0

Chyba jednak się do tego nie nadaję. Zmieniłem swój sposób wyświetlania na ten z postu powyżej i mam kody błedu.

javac Pracownik_lista.java
Pracownik_lista.java:65: error: cannot find symbol
                    for(int i=0; i<nazwiska.size(); i++)
                                   ^
  symbol: variable nazwiska
Pracownik_lista.java:67: error: cannot find symbol
                        pole.append(" " +imiona.get(i)+ " " +nazwiska.get(i)+ "\n");
                                         ^
  symbol: variable imiona
Pracownik_lista.java:67: error: cannot find symbol
                        pole.append(" " +imiona.get(i)+ " " +nazwiska.get(i)+ "\n");
                                                             ^
  symbol: variable nazwiska

Zależy mi aby to zrozumieć.

0

weź środowisko sobie zainstaluj a nie z palca :P np. Eclipse

1

@swr, zła propozycja, IDE są ułatwieniem dla tych, którzy potrafią pisać programy z palca. Pozostali powinni mieć zakaz stosowania IDE.
@poliocertes, chyba oczywiste, że musisz pobrać listę imion i nazwisk z klasy Select. Coś w rodzaju:

Select select = new Select();
ArrayList<String> imiona = select.getImiona();

poprawienie znacznika <code class="java"> - fp

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