Jtable ile veritabanından veri çekmek ve çekilen verileri label veya TextField alanlarına gönderip bu alanlar üzerinden düzenleyerek tekrar veritabanına nasıl gönderebileceğimizi inceliyelim.
1)Tasarım Bölümü:
Bu şekilde basit bir tasarım yaptıktan sonra TextField ve id için ayırdığımız label’a idlerini veriyoruz.
2)Kod Kısmı:
Öncelikle veritabanından bütün verileri çekerken bunları bir liste üzerinde tutup daha sonra Tablo’ya koymamız daha doğru olacaktır.
Bunun için:
class User { private int id; private String Name,Surname,Email,Password; public User(){ } public User(int id,String Name,String Surname,String Email,String Password){ this.id=id; this.Name=Name; this.Surname=Surname; this.Email=Email; this.Password=Password; } public int getid(){ return id; } public String getName(){ return Name; } public String getSurname(){ return Surname; } public String getEmail(){ return Email; } public String getPassword(){ return Password; } }
Şeklinde bir User class’ı oluşturuyoruz. Bu class içerisine veritabanından gelen değerleri tutmak için oluşturulmuştur. Bu değişkenleri tablonun belirli sutunlarına koymak için kullanıyor olacağız.
3)MyConnection Class’ı
public class MyConnection { public static Connection getConnection(){ Connection con=null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://localhost/loginandregister","root",""); } catch (Exception e) { System.out.println(e.getMessage()); } return con; } }
Bu class’ın nasıl çalıştığını daha önceki makalelerimizde görmüştük. Çok özetle bu alanda veritabanımızın adını ve yerinin nerede olduğunu gösteriyoruz.
3)Ana Kod:
public void get_value(){ ArrayList<User>ogrenciler=new ArrayList<>(); String query="SELECT * FROM `users`"; try { PreparedStatement ps=MyConnection.getConnection().prepareStatement(query); ResultSet rs=ps.executeQuery(); User user; while(rs.next()){ user=new User(rs.getInt("id"),rs.getString("Name"),rs.getString("Surname"),rs.getString("Email"),rs.getString("Password")); ogrenciler.add(user); } } catch (Exception e) { } DefaultTableModel model=(DefaultTableModel)jTable1.getModel(); model.setNumRows(0); Object[] row=new Object[5]; for (int i = 0; i < ogrenciler.size(); i++) { row[0]=ogrenciler.get(i).getid(); row[1]=ogrenciler.get(i).getName(); row[2]=ogrenciler.get(i).getSurname(); row[3]=ogrenciler.get(i).getEmail(); row[4]=ogrenciler.get(i).getPassword(); model.addRow(row); } }
Bu alanda kod biraz karışık gözükebilir. ResultSet sayesinde değerleri döndürüyoruz ve User classının içinden değerleri çekiyoruz. Daha sonra istediğimiz row değeri(Tablodaki index değer) yerine koyarak tablomuzu dolduruyoruz.
4)Tablodan Gelen Verileri TextField ve Label’a Almak:
Bu işlem için öncelikle Tablomuza sağ tıklayıp Mouse Click event>Mouse clicked eventi ekliyoruz.
Bu event kısmının içerisine:
lbl_id.setText(jTable1.getValueAt(jTable1.getSelectedRow(),0).toString()); txt_name.setText(jTable1.getValueAt(jTable1.getSelectedRow(),1).toString()); txt_surname.setText(jTable1.getValueAt(jTable1.getSelectedRow(),2).toString()); txt_email.setText(jTable1.getValueAt(jTable1.getSelectedRow(),3).toString()); txt_password.setText(jTable1.getValueAt(jTable1.getSelectedRow(),4).toString());
Buradaki 0,1,2,3,4 değerleri tablodaki verilerin indexlerini temsil etmektedir.
5)Update İşlemi:
String id=lbl_id.getText(); String name=txt_name.getText(); String surname=txt_surname.getText(); String email=txt_email.getText(); String password=txt_password.getText(); String query="UPDATE `users` SET `Name`=?,`Surname`=?,`Email`=?,`Password`=? WHERE `id`=?"; PreparedStatement ps; ResultSet rs; try { ps=MyConnection.getConnection().prepareStatement(query); ps.setString(1,name); ps.setString(2,surname); ps.setString(3,email); ps.setString(4,password); ps.setString(5,id); ps.executeUpdate(); if(ps.executeUpdate()>0) { JOptionPane.showMessageDialog(null,"Succesfully"); } get_value(); } catch (Exception e) { }
Özetle anlatacak olursak öncelikle tablodan gelen verileri label ve textfield alanlarına göndermiştik. Şimdi label ve textfield alanlarında bulunan değerleri terkar alıyoruz ve sql update sorgusunda soru işaretli yerlere yerleştiriyoruz.Bu işlemi yaparken PreparedStatement kullanıyoruz.
6)Delete İşlemi:
String id=lbl_id.getText(); String query="DELETE FROM `users` WHERE id=?"; PreparedStatement ps; try { ps=MyConnection.getConnection().prepareStatement(query); ps.setString(1, id); ps.executeUpdate(); if(ps.executeUpdate()==0){ JOptionPane.showMessageDialog(null,"Deleted"); } get_value(); } catch (Exception e) { }
Aynı işlemi delete sorgusuyla yapıyoruz. Bu sefer tek ihtiyacımız olan şey id. Bu nedenle sadece id değerini aldık. İşlem bittikten sonra tablodan veri çekme fonksiyonunu tekrar çağırdık. Böylelikle silme veya güncelleme işleminden sonra tablomuz güncellenecek.
Proje linki:
https://github.com/Utkukemalcifci/Veritabani-islemleri
Eğer sorun yaşarsanız lütfen eklediğiniz jar dosyalarını gözden geçiriniz.rs2xml ve mysql-connector jarlarının eklendiğinden emin olun.
İlk Yorumu Siz Yapın