Odświeżanie JTable po usunięciu wiersza z MySQL

0

Witam wszystkich.

Mój problem polega na tym iż po usunięciu z bazy danych MySQL rekordu nie wiem jak zmusić JTable ażeby nie pokazywał usuniętych rekordów korzystam z własnego modelu tabeli .

zawartosc_tabeli = stat.executeQuery(pokaz_wszystkich);
tabela_wyszukiwania = new MojaTabela(zawartosc_tabeli);
final JTable tabela = new JTable(tabela_wyszukiwania);

Próbowałem
tabela_wyszukiwania.fireTableDataChanged();

, które wywołuje w metodzie obsługi zdarzenia kliknięcia przyciusku

if(stat.executeUpdate(usun_usera) > 0)
{
							
JOptionPane.showMessageDialog(null,"Użytkownik : " + wybrane_z_tabeli + " został pomyślnie usunięty. ", "INFORMACJA", JOptionPane.INFORMATION_MESSAGE);
							
tabela_wyszukiwania.fireTableDataChanged();
}

ale bez skutku po kliknięciu przycisku rekord usuwa się z bazy poprawnie ale nie zmienia tzn nie usuwa z prezentacji wierszy JTable tegoż rekordu.

Będę wdzięczny za pomoc, z góry dziękuje

0

fireTableRowsInserted(0,data.size()-1);

pozdrawiam

0

ja mam to zrobione tak:

JTable = new JTable();
....
....
//WypozyczeniaOUT klasa reprezentujaca wiersz w tabelce w BD
WypozyczeniaOUT wypoOUT = ((WypoTableModel)jTable1.getModel()).getWypo(jTable1.getSelectedRow());
//ja wybieralem rekord w ten sposob, że zaznaczalem sobie wiersz w JTable i tyle
usunWypo(wypoOUT.getId());//wywolanie metody usowajacej wiersz z BD
ArrayList<WypozyczeniaOUT>wypozyczenia = pobierzWypozyczenia();//pobranie danych z BD
jTable1.setModel(new WypoTableModel(wypozyczenia));//ustawienie modelu
jTable1.repaint();

pzdr.

0

Niestety próbowałem obydwu metod nie działają u mnie, w związku z tym ma prośbę czy ktoś ma jakieś pomyły ??Byc może mam cosik nie tak zrobione

public SAUW_TABELA(ResultSet tmp_wynik_zapytania)
	{
		wynik_zapytania = 	tmp_wynik_zapytania;
				
		try
		{
			wynik_zapytania_MD = wynik_zapytania.getMetaData();
			
		}
		catch(SQLException e)
		{
			 JOptionPane.showMessageDialog(null,"Wystąpił następujący błąd "+"\n\n" + e.getMessage() + "\n\n", "BŁĄD !", JOptionPane.ERROR_MESSAGE);
		}		
			
	}	
			
		public String getColumnName(int kolumny) 
		{
	        return nazwy_kolumn_wyswietl_uzytkownikow[kolumny];
	    }
		
		
		
		public int getColumnCount()
		{
			try
			{
			return wynik_zapytania_MD.getColumnCount();
			}
			catch(SQLException e)
			{
				 JOptionPane.showMessageDialog(null,"Wystąpił następujący błąd "+"\n\n" + e.getMessage() + "\n\n", "BŁĄD !", JOptionPane.ERROR_MESSAGE);
			return 0;
			}
		}
		
		public Object getValueAt(int wiersze, int kolumny) 
		{
			try
			{
				wynik_zapytania.absolute(wiersze + 1);
				return wynik_zapytania.getObject(kolumny + 1);
			}
			catch(SQLException e)
			{
				 JOptionPane.showMessageDialog(null,"Wystąpił następujący błąd "+"\n\n" + e.getMessage() + "\n\n", "BŁĄD !", JOptionPane.ERROR_MESSAGE);
			return null;
			}
		}
		
			
		public int getRowCount()
		{
			try
			{
			wynik_zapytania.last();
			
			return wynik_zapytania.getRow();
			}
			catch(SQLException e)
			{
				 JOptionPane.showMessageDialog(null,"Wystąpił następujący błąd "+"\n\n" + e.getMessage() + "\n\n", "BŁĄD !", JOptionPane.ERROR_MESSAGE);
			return 0;
			}
			
			
			
		}
			
		String[] nazwy_kolumn_wyswietl_uzytkownikow = {"Index","Login użytkownika","Hasło użytkownika"};
				
		private ResultSet wynik_zapytania;
		private ResultSetMetaData wynik_zapytania_MD;
		
	}
0

wg mnie nieco dziwnie masz to zrobione...choc bledow na 1 rzut oka nie widze...
rozumiem ze Twoj kod to klasa implementujaca AbstractTableModel...tylko nie rozumiem dlaczego w resultsecie przechowujesz kolekcje obiektow bedacych wynikiem zapytania... zamiadt zastosowac kolekcję obiektów DTO...ale to ogolnie nie powinno miec znaczenia

proces postepowania powinien wygladac tak:

  1. zaznaczasz krotke do usuniecia
  2. usuwasz ją
  3. pobierasz dane z bazy (o ile usuwanie sie powiodlo, to powinienes miec poprawny zbior danych)
  4. inicjalizujesz model nowymi danymi
  5. inicjalizujesz jTable'a uaktualnionym modelem
  6. jTable.repaint();

i to musi działać. powstawiaj sobie System.out'y (prymitywny ale dobry sposob) aby sprawdzic czy na kazdym kroku wszystko idzie OK (np. czy rzeczywiscie przekazujesz obiekt do usuniecia, ilosc wierszy po usunieciu jest odpowiednia, etc... )

0

Czy można prosić o jakieś źródła z implementacja tego rowiązania, bo szczerze to już sam nie wiem co źle robię :(

0

Problem nadal nie rozwiązany po klikudniowych kombinacjach, no ale dzieki za pomoc

0

ale co nie działa dokłądnie? usowa Ci wybrana krotke z bazy? a jak pobierasz ponownie dane to są już bez tej skasowanej krotki?

0

A nie dziedziczysz czasem modelu po AbstractTableModel?
Jeśli tak to zamień na DefaultTableModel.

0

a dlaczego AbstractTableMOdel mógłby byc zły? przy kazdym, w sumie, jtable'u z niego korzystałem i działa...

0

Wszystko ok, po prostu definiowałem JTable lokalnie jako final i dlatego mi nie działało.

Dzięki za pomoc, pozdrawiam

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