Java Swing ile Veritabanı işlemleri
Herkese merhabalar. Bu yazımızda Java Swing Postgresql veritabanında CRUD işlemlerinin nasıl yapıldığından bahsedeceğiz.Buyrun yazımıza geçelim.
İlk olarak kod geliştirme ortamımızdan bahsedelim.Eclipse idesinde java 11 ile geliştirilmiş ve windowBuilder kullanılarak Swing Ekran tasarımı yapılmıştır.
Yazdığımız sınıfların ve paketlerin ekran görüntüsü

1 — Veritabanı bağlantı ayarı
Veritabanı bağlantı ayarları ConnetDb sınıfnda tutulmuştur.Postgresql veritabanına baglantı yapıcağız.Bilgiayarınızda Posgtresql veritabanı yüklü olmalıdır.
Malzeme adında bir database oluşturulmalı ve kullanıcı adı ve şifrede belirlemeliyiz.
public class ConnectDb {
private final static String url=”dbc:postgresql://localhost:5432/malzeme;
private final static String user = “postgres”;
private final static String password = “postgres”;
public static Connection baglanDB(){
Connection con=null;
try{
con = DriverManager.getConnection(url, user, password);
}catch(Exception e){
con=null;
}
return con;
}
}
Ayrıca postgresql jarı eclipse eklenmelidir.
Eclipse de referans library içine eklenen jarın ekran görüntüsüaşağıdadır.

2 — Database Ekleme,Güncelleme,Silme ve Gösterim işlemleri
DAO(Data Access object) paketi oluşturup içerisine MalzemeDao sınıfı oluşturuyoruz. CRUD işlemleri için yapılan işlemler insert,update,delete select sqlleri ile yazılan metotlarını oluşturuyoruz.
İnsert işlemi için yazılan metot
private String INSERT_MALZEME_SQL = “INSERT INTO malzeme.malzeme”
+ “ (malzeme_adi, durumu, aciklama, adet,marka,garanti_suresi) VALUES(?, ?, ?, ?, ?,?);”;
public boolean insertKayit(Malzeme malzeme) throws SQLException {
try {
Connection connection = ConnectDb.baglanDB();
PreparedStatement preparedStatement = connection.prepareStatement(INSERT_MALZEME_SQL);
preparedStatement.setString(1, malzeme.getMalzeme_adi());
preparedStatement.setInt(2, malzeme.getDurum());
preparedStatement.setString(3, malzeme.getAciklama());
preparedStatement.setInt(4, malzeme.getAdet());
preparedStatement.setString(5, malzeme.getMarka());
preparedStatement.setString(6, malzeme.getGarantiSuresi());
preparedStatement.executeUpdate();
return true;
} catch (SQLException e) {
printSQLException(e);
}
return false;
}
Update işlemi için yapılan metot
private static final String UPDATE_SQL = “update malzeme.malzeme set malzeme_adi = ? “
public boolean updateKayit(Malzeme malzeme) throws SQLException {
try {
Connection connection = ConnectDb.baglanDB();
PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
preparedStatement.setString(1, malzeme.getMalzeme_adi());
preparedStatement.setInt(2, malzeme.getDurum());
preparedStatement.setString(3, malzeme.getAciklama());
preparedStatement.setInt(4, malzeme.getAdet());
preparedStatement.setString(5, malzeme.getMarka());
preparedStatement.setString(6, malzeme.getGarantiSuresi());
preparedStatement.setInt(7, malzeme.getId());
preparedStatement.executeUpdate();
return true;
} catch (SQLException e) {
// print SQL exception information
printSQLException(e);
}
return false;
}
Delete işlemi için yapılan metot
private static final String DELETE_SQL = “delete from malzeme.malzeme where id = ?;”;
public int deleteKayit(int malzemeId) throws SQLException {
int result = 0;
try {
Connection connection = ConnectDb.baglanDB();
PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
preparedStatement.setInt(1, malzemeId);
result = preparedStatement.executeUpdate();
} catch (SQLException e) {
// print SQL exception information
printSQLException(e);
}
return result;
}
Select işlemi için yapılan metotlar
id ve tüm veriler için ayrı ayrı metotlar yazılmıştır.
private static final String SELECT_BY_ID = “select id,malzeme_adi,durumu,aciklama,adet,marka,garanti_suresi from malzeme.malzeme where id =?”;
private static final String SELECT_ALL_QUERY = “select * from malzeme.malzeme”;
public Malzeme malzemeGetirId(int malzemeId) {
Malzeme m = null;
try {
Connection connection = ConnectDb.baglanDB();
PreparedStatement preparedStatement = connection.prepareStatement(SELECT_BY_ID);
preparedStatement.setInt(1, malzemeId);
ResultSet rs = preparedStatement.executeQuery();
m = new Malzeme();
while (rs.next()) {
m.setId(rs.getInt(“id”));
m.setAciklama(rs.getString(“aciklama”));
m.setDurum(rs.getInt(“durumu”));
m.setGarantiSuresi(rs.getString(“garanti_suresi”));
m.setMalzeme_adi(rs.getString(“malzeme_adi”));
m.setMarka(rs.getString(“marka”));
}
return m;
} catch (SQLException e) {
printSQLException(e);
}
return m;
}
public List<Malzeme> getAllMalzemeler() {
Malzeme m = null;
List<Malzeme> mList = null;
try {
Connection connection = ConnectDb.baglanDB();
PreparedStatement preparedStatement = connection.prepareStatement(SELECT_ALL_QUERY);
ResultSet rs = preparedStatement.executeQuery();
mList = new ArrayList<Malzeme>();
while (rs.next()) {
m = new Malzeme();
m.setId(rs.getInt(“id”));
m.setAciklama(rs.getString(“aciklama”));
m.setDurum(rs.getInt(“durumu”));
m.setGarantiSuresi(rs.getString(“garanti_suresi”));
m.setMalzeme_adi(rs.getString(“malzeme_adi”));
m.setMarka(rs.getString(“marka”));
mList.add(m);
}
return mList;
} catch (SQLException e) {
printSQLException(e);
}
return mList;
}
sql exception için yapılan metot.
Bu metotla ürlerine göre exceptionları ayrı ayrı tutuyoruz.
public static void printSQLException(SQLException ex) {
for (Throwable e : ex) {
if (e instanceof SQLException) {
e.printStackTrace(System.err);
System.err.println(“SQLState: “ + ((SQLException) e).getSQLState());
System.err.println(“Error Code: “ + ((SQLException) e).getErrorCode());
System.err.println(“Message: “ + e.getMessage());
Throwable t = ex.getCause();
while (t != null) {
System.out.println(“Cause: “ + t);
t = t.getCause();
}
}
}
Entity veritabanı tablolarının, javada tutulduğu sınıfları yazmaya başlayalım.
3- Entities paketi içinde yazılan sınıflar
Veritabanının birebir karşılığı olan sınıflardır.
Önemli Bilgi tipler ve isimler veritabanı tablo kolon isimleri ile aynı olmalıdır.

package entities;
public class Malzeme {
private int id;
private String malzeme_adi;
private String marka;
private String aciklama;
private String garantiSuresi;
private int durum;//
private int adet;
}
getter setter ve constructor eklemeyi unutmayalım.
4-Swing Önyüz Ekran Tasarımı
guiView paketi içinde MalzemelerGui Sınıfı için işlemler
MalzemelerGui sınıfı içinde ekran tasarımı için windowBuilder eklentisi kullanıyoruz.Bu sayede Ekranları sürekle birak yönetimi ile daha kolay ve hızlı tasarlayabiliyoruz.

Windowbuilder ile sınıf oluşturmakdan daha sonraki bir yazıda bahsedeceğim.
WindowBuilder tasarım ekranı eclipsede görüntüsü

windowbuilder tasarım ekranı kod arasında geçiş yapmak için ekranda Desing /source olarak seçmemiz gerekmektedir.
Ekranımızın Java kodu
package guiview;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import dao.MalzemeDao;
import entities.Malzeme;
//https://camposha.info/java-examples/java-jtable-mysql-insert-select-update-delete/
public class MalzemelerGui extends JInternalFrame {
private JFrame frmMalzemeTakip;
private JTextField txt_adi;
private JTextField txt_marka;
private MalzemeDao malzemeDao = null;
private JTable table;
private JTextField txt_siraNo;
private JTextField txt_garanti;
private JButton btnEkle;
private JButton btnGunle;
private JButton btnSil;
private DefaultTableModel model;
private JScrollPane scroll;
/**
* Launch the application.
*/
// public static void main(String[] args) {
// EventQueue.invokeLater(new Runnable() {
// public void run() {
// try {
// MalzemelerGui window = new MalzemelerGui();
// window.frmMalzemeTakip.setVisible(true);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// });
// }
/**
* Create the application.
*/
public MalzemelerGui() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmMalzemeTakip = new JFrame();
frmMalzemeTakip.setVisible(true);
frmMalzemeTakip.setTitle(“Malzeme Takip”);
frmMalzemeTakip.setResizable(true);
frmMalzemeTakip.setBounds(100, 100, 775, 546);
frmMalzemeTakip.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmMalzemeTakip.getContentPane().setLayout(null);
JSeparator separator = new JSeparator();
separator.setForeground(Color.BLUE);
separator.setBounds(355, 12, -14, 425);
frmMalzemeTakip.getContentPane().add(separator);
JPanel pnl_malzeme = new JPanel();
pnl_malzeme.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), “Malzeme Listesi”,
TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
pnl_malzeme.setBounds(50, 207, 683, 400);
frmMalzemeTakip.getContentPane().add(pnl_malzeme);
pnl_malzeme.setLayout(null);
table=new JTable();
table.setModel(new DefaultTableModel());
tabloDoldur();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setBounds(12, 25, 659, 253);
pnl_malzeme.add(new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
// do some actions here, for example
// print first column value from selected row
txt_siraNo.setText(table.getValueAt(table.getSelectedRow(), 0).toString());
txt_adi.setText(table.getValueAt(table.getSelectedRow(), 1).toString());
txt_marka.setText(table.getValueAt(table.getSelectedRow(), 2).toString());
txt_garanti.setText(table.getValueAt(table.getSelectedRow(), 3).toString());
btnEkle.setEnabled(false);
btnGunle.setEnabled(true);
btnSil.setEnabled(true);
// System.out.println(table.getValueAt(table.getSelectedRow(), 1).toString());
}
});
// table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
// public void valueChanged(ListSelectionEvent event) {
//
// }
// });
JPanel pnl_malzeme_islemleri = new JPanel();
pnl_malzeme_islemleri.setLayout(null);
pnl_malzeme_islemleri.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)),
“Malzeme Ekle-Gu00FCncelle-Sil”, TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
pnl_malzeme_islemleri.setBounds(50, 12, 682, 179);
frmMalzemeTakip.getContentPane().add(pnl_malzeme_islemleri);
JLabel lbl_adi = new JLabel(“Adı”);
lbl_adi.setBounds(27, 66, 70, 15);
pnl_malzeme_islemleri.add(lbl_adi);
txt_adi = new JTextField();
txt_adi.setBounds(160, 66, 145, 19);
pnl_malzeme_islemleri.add(txt_adi);
txt_adi.setColumns(10);
JLabel lbl_markası = new JLabel(“Markası”);
lbl_markası.setBounds(27, 93, 70, 15);
pnl_malzeme_islemleri.add(lbl_markası);
txt_marka = new JTextField();
txt_marka.setColumns(10);
txt_marka.setBounds(160, 95, 145, 19);
pnl_malzeme_islemleri.add(txt_marka);
JLabel lbl_garanti = new JLabel(“Garanti Süresi”);
lbl_garanti.setBounds(27, 119, 115, 15);
pnl_malzeme_islemleri.add(lbl_garanti);
txt_garanti = new JTextField();
txt_garanti.setBounds(160, 117, 145, 19);
pnl_malzeme_islemleri.add(txt_garanti);
btnEkle = new JButton(“Ekle”);
btnEkle.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(txt_adi.getText().isEmpty() || txt_garanti.getText().isEmpty()
|| txt_marka.getText().isEmpty())
{
JOptionPane.showMessageDialog(null, “Boş Veriler Var!!”);
return;
}
malzemeDao = new MalzemeDao();
Malzeme ekle = new Malzeme();
ekle.setAciklama(txt_adi.getText());
ekle.setGarantiSuresi(txt_garanti.getText());
ekle.setMalzeme_adi(txt_adi.getText());
ekle.setMarka(txt_marka.getText());
try {
if(malzemeDao.insertKayit(ekle)==true)
{
JOptionPane.showMessageDialog(null, “Ekleme Başarılı”);
}
temizle();
tabloDoldur();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnEkle.setBounds(147, 140, 95, 25);
pnl_malzeme_islemleri.add(btnEkle);
btnGunle = new JButton(“Güncelle”);
btnGunle.setEnabled(false);
btnGunle.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
Malzeme gunle = new Malzeme();
gunle.setAciklama(txt_adi.getText());
gunle.setGarantiSuresi(txt_garanti.getText());
gunle.setMalzeme_adi(txt_adi.getText());
gunle.setMarka(txt_marka.getText());
gunle.setId(new Integer(txt_siraNo.getText()));
malzemeDao=new MalzemeDao();
try {
if(malzemeDao.updateKayit(gunle)==true)
{
JOptionPane.showMessageDialog(null, “Güncelleme Başarılı”);
}
temizle();
tabloDoldur();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnGunle.setBounds(245, 140, 95, 25);
pnl_malzeme_islemleri.add(btnGunle);
btnSil = new JButton(“Sil”);
btnSil.setEnabled(false);
btnSil.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String[] options = {“Yes”, “No”};
int answ = JOptionPane.showOptionDialog(null, “Silmek İstiyormusun??”, “Silme Onayı”, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
if (answ == 0) {
int index = table.getSelectedRow();
try {
malzemeDao=new MalzemeDao();
if(malzemeDao.deleteKayit(new Integer(txt_siraNo.getText()))>0)
{
JOptionPane.showMessageDialog(null, “Silme Başarılı”);
temizle();
tabloDoldur();
}
else
{
JOptionPane.showMessageDialog(null, “Silme Başarısız”);
}
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(null, “Silme Başarısız”);
e1.printStackTrace();
} catch (SQLException e1) {
JOptionPane.showMessageDialog(null, “Silme Başarısız”);
e1.printStackTrace();
}
}}});
btnSil.setBounds(345, 140, 95, 25);
pnl_malzeme_islemleri.add(btnSil);
JLabel lblSraNo = new JLabel(“Sıra No”);
lblSraNo.setBounds(27, 35, 70, 15);
pnl_malzeme_islemleri.add(lblSraNo);
txt_siraNo = new JTextField();
txt_siraNo.setEnabled(false);
txt_siraNo.setBounds(160, 35, 145, 19);
pnl_malzeme_islemleri.add(txt_siraNo);
txt_siraNo.setColumns(10);
txt_garanti.setColumns(10);
JButton btnTemizle = new JButton(“Temizle”);
btnTemizle.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
temizle();
}
});
btnTemizle.setBounds(443, 140, 95, 25);
pnl_malzeme_islemleri.add(btnTemizle);
}
private void temizle() {
txt_adi.setText(“”);
txt_garanti.setText(“”);
txt_marka.setText(“”);
txt_siraNo.setText(“”);
btnEkle.setEnabled(true);
btnGunle.setEnabled(false);
btnSil.setEnabled(false);
}
private void tabloDoldur() {
// model = new DefaultTableModel();
// model.setColumnIdentifiers(new Object[] { “S.No”, “Adı”, “Markası”, “Garanti Süresi” });
MalzemeDao malzemeDao = new MalzemeDao();
// List<Malzeme> mList = new ArrayList<Malzeme>();
model = malzemeDao.getAllMalzemeler();
// for (int i = 0; i < mList.size(); i++) {
//
// Malzeme m = (Malzeme) mList.get(i);
// model.insertRow(i, new Object[] { m.getId(), m.getMalzeme_adi(), m.getMarka(), m.getGarantiSuresi() });
// System.out.println(i+””);
//
// }
System.out.println(“BİTTİ”);
table.setModel(model);
}
public void setVisible(boolean b) {
// TODO Auto-generated method stub
}
public void setSelected(boolean b) {
// TODO Auto-generated method stub
}
}
Dört ayrı paket içinde yazılan sınıflarla ile java Swing ile crud işlemlerini tamamladık.

Run ederek programın çalıştığını görebiliriz.
Java Swing ile CRUD işlemlerinin nasıl yapıldığını detaylı bir şekilde inceledik.Bizi latestsoftwaredevelopers.com adresinden de takip edebilirsiniz.
Kodların tamamına aşağıdaki linkten erişebilirsiniz.
https://gitlab.com/latestsoftwaredevelopers/java-swing-crud
Java ile ilgili yazılarımıza devam edeceğiz.Şimdilik iyi çalışmalar