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

Postgres - dlaczego po kliknięciu w button wyświetla mi się tylko ostatnia linijka?
PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
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.

Kopiuj
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.

edytowany 1x, ostatnio: bogdans
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0
Kopiuj
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:

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans
0

można użyć też

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

w dwóch

bogdans
Wtf? W klasie JTextField nie ma metody append.
PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
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:

Kopiuj
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?

edytowany 1x, ostatnio: poliocertes
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0
Kopiuj
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;
    }
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
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.

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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.

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
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.

Kopiuj
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ć.

SW
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 4 lata
  • Postów:426
0

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

bogdans
Nie, IDE jest tylko dla tych, którzy potrafią programować bez IDE.
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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:

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

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: flowCRANE
PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
0

@bogdans - właśnie niewiele rzeczy w tej materii jest dla mnie oczywistych, niestety. Próbuję to zrozumieć, ale coraz bardziej jestem przekonany, że to nie dla mnie.

Co do IDE to próbowałem. Najpierw Netbeansa, który mi się nie podobał, a potem Eclipse, który jeszcze mniej mi pasował. Zwyczajnie nie rozumiem tego, co IDE robi za mnie samo. @bogdans ma rację moim zdaniem - trzeba umiec programować aby dzięki IDE móc to sobie ułatwiać.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.