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

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

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