‘SQL’ Kategorisi için Arşiv

“java.sql.SQLException: Too many connections” geçenlerde karşılaştığım bu hatanın sebebi oluşturduğumuz statementi kapatmayı unuttuğumuzdan dolayı oluşuyormuş. Örneğin bir formumuz var ve statement’i kapatmayı unuttuk bu formu sürekli açıp kapattığımızda statement tekrar tekrar oluşuyor ve sql güvenlik sebebiyle buna izin vermiyor.Yapacağımız tek şey ise;

Statement st;//Bir statement oluşturduk

try{
st=executeQuery(“select * from tablo”); //st ile sorgumuzu vs. yaptırdık
}catch(Exception ex){
ex.printStackTrace();
}

//işlemlerimizi yaptık.

try{
st.close(); //Bunu yaptığımızda st yi kapatacak ve too many connections hatasını ekrana gelmeyecek.
}catch(Exception ex){
ex.printStackTrace();
}

Textfield’den kullanıcı veri girerek sql tablomuzda nasıl yeni satır oluşturacağımızın kodlarını vereceğim:
1

Önce textfieldlerimizi oluşturalım ve bir tane buton ekleyelim. Daha sonra javayla SQL baglantimizi yapalım. ve ekleyeceğimiz tabloyu statement ile select yapalım.

personellerSonucKumesi = st.executeQuery(“SELECT * FROM  personeller”);

Ekle butonuna 2 kere tıkladığımız java kullanıcı butona tıkladığında neler yapılacağını yazacağımız kısmı açacaktır. ve kodlar:

//Adi, Soyadi, DogumTarihi, Gorevi sql’deki tablomuzda bulunun kolonların ismidir. 

//moveToInsertRow() ile javaya yeni kayıt ekleyeceğimizi söylüyoruz.

//personellerSonucKumesi.updateString(“Adi”,adTextField.getText()); ile

// “Adi” kolonuna oluşturduğumuz adTextField ‘den kullanıcının yazdığı kayıdı alarak eklemesini söylüyoruz.

private void ekleButonActionPerformed(java.awt.event.ActionEvent evt) {
try{
personellerSonucKumesi.moveToInsertRow();
personellerSonucKumesi.updateString(“Adi”,adTextField.getText());
personellerSonucKumesi.updateString(“Soyadi”,soyadTextField.getText());
personellerSonucKumesi.updateString(“DogumTarihi”,yasTextField.getText());
personellerSonucKumesi.updateString(“Gorevi”,goreviTextField.getText());
personellerSonucKumesi.updateString(“TelefonNumarasi”,telnoTextField.getText());
personellerSonucKumesi.insertRow();
JOptionPane.showMessageDialog(rootPane, “Yeni Kayit Eklendi”);

}catch(SQLException ex){
JOptionPane.showConfirmDialog(null, “Kayıt Eklenemedi”, “Kişiler Tablosu”, JOptionPane.PLAIN_MESSAGE);
}
}

Bir önceki yazıda Combobox’a seçenek eklemeyi göstermiştim. Şimdi ise bu seçenekleri direk sql’den alması için gereken kodları göstereceğim.

 

//Burada baglantiAc() fonksiyonu ile statement oluşturmayı java ile sql’e bağlanma yazısında göstermiştim.

//personelSonucKumesi = st.executeQuery(“SELECT Adi FROM personeller”); ile sql’e personeller tablosundan sadece isim sütununu çekmesini söylüyoruz. Daha sonra personelComboYaz() fonksiyonunu çağırarak çektiğimiz verileri combobox’a yazdırıyoruz.Bu fonksiyon :

while(personelSonucKumesi.next()){
personelCombo.addItem(personelSonucKumesi.getString(“Adi”));
}

While döngüsüyle personelSonucKumesi’nde tüm verileri alana kadar devam ettiriyoruz.

personelSonucKumesi.getString(“Adi”) ile bu verilerden Adi sütunundaki satırları tek tek çekiyoruz.

 

 

public Statement baglantiAc() throws Exception{
Class.forName(driver).newInstance();
baglayici = DriverManager.getConnection(url, userName, password);
return baglayici.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}
public NewJFrame(){
this.ataPencere = ata;
initComponents();
Statement st = null;

try {
st = baglantiAc(); //veritabanına bağlanılıyor
} catch (Exception ex) {
JOptionPane.showConfirmDialog(null, “Bağlantı Başarısız”, “MySQL Bağlantısı”, JOptionPane.PLAIN_MESSAGE);
}
try{
personelSonucKumesi = st.executeQuery(“SELECT Adi FROM personeller”);
personelComboYaz();
}catch(Exception ex){

}
}

public void personelComboYaz(){
try {
while(personelSonucKumesi.next()){
personelCombo.addItem(personelSonucKumesi.getString(“Adi”));
}
} catch (SQLException ex) {
Logger.getLogger(AIsEkle.class.getName()).log(Level.SEVERE, null, ex);
}
}

 

1Örneğin Formumuzda sql’de bir tablodan ad ve soyad çekeceğiz. 2 tane textfield oluşturalım. adTextField ve soyadTextField olsun. Önceki yazılarda olduğu gibi sql’i javaya bağlayalım ve ResultSet kısmını personellerSonucKumesi yapalım.Daha sonra bir kayitGetir() adında fonksiyon oluşturalım :

 

public void kayitGetir(String yon) {
try {

if (yon.equals(“ileri”)) {
personellerSonucKumesi.next();
} else if (yon.equals(“geri”)) {
personellerSonucKumesi.previous();
} else if (yon.equals(“ilkkayit”)) {
personellerSonucKumesi.first();
} else if (yon.equals(“sonkayit”)) {
personellerSonucKumesi.last();
}
adTextField.setText(personellerSonucKumesi.getString(“Adi”));
soyadTextField.setText(personellerSonucKumesi.getString(“Soyadi”));
} catch (Exception e) {
JOptionPane.showConfirmDialog(null, “Kayıt Mevcut Değil”, “Kişiler Tablosu”, JOptionPane.PLAIN_MESSAGE);
}

}

 

Daha sonra ileri, geri, ilk kayıt ve son kayıt adında butonlar oluşturalım.

private void ileriButonActionPerformed(java.awt.event.ActionEvent evt) {
kayitGetir(“ileri”);
}

private void oncekiButonActionPerformed(java.awt.event.ActionEvent evt) {
kayitGetir(“geri”);
}

private void ilkkayitButonActionPerformed(java.awt.event.ActionEvent evt) {
kayitGetir(“ilkkayit”);
}

private void sonkayitButonActionPerformed(java.awt.event.ActionEvent evt) {
kayitGetir(“sonkayit”);
}

 

Butonlara tıklandığında yapılacakları yazalım. İleri butonuna tıkladığımızda personellerSonucKumesi.next(); çalışacak ve bir sonraki kayıta geçecek. Daha sonra

adTextField.setText(personellerSonucKumesi.getString(“Adi”));
soyadTextField.setText(personellerSonucKumesi.getString(“Soyadi”));

textfieldadı.setText yani textfielde bir text gireceğimizi belli ediyoruz. personellerSonucKumesi.getString(“Adi”) kodlarıyla da sql’den resultset kısmında aldığımız personellerSonucKumesi.getString yani bu sonuçtan bir String al.  getString(“Adi”) bunu yazarakta tablomuzdaki Adi kolonundan bir string çekmiş oluyoruz. Aynı şeyler Soyadi kısmında da geçerlidir. Bir sonraki yazıda çektiğimiz verilerin nasıl değiştireleceğini göstereceğim.

public void tumuTabloyuYaz(){
ResultSet tumu;
try {
st = baglayici.createStatement();
}
catch (SQLException ex) {
ex.printStackTrace();
}
try {
tumu = st.executeQuery(“select * from sqltabloadi”);
ResultSetMetaData tumudata= tumu.getMetaData();
int j = 0,k;

int kolonsayisi=tumudata.getColumnCount();//Kolon sayisini alir.

//Title leri alır.
for( j=0;j<kolonsayisi;j++) {
kolon[j]=rowdata.getColumnName(j+1);
}
//****************
//Model olusturulumu
jTable1.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {},new String [] {}));
//*******************

DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
model.setColumnIdentifiers(kolon);

while(tumu.next()) {
Object[] o=new Object[kolonsayisi];
for(j=0;j<kolonsayisi;j++) {
o[j]=tumu.getObject(j+1);
}
model.addRow(o);//tabloya ekler
}
jTable1.setModel(model);
}
catch (SQLException ex) {
ex.printStackTrace();
}
}

Ek Bilgiler;

Eğer SQL’deki kolonların isimlerini almak istemiyorsanız ” Title’leri alır ” yazan kısmı silerek aşağıdaki gibi diziyi kendi başlıklarınızla oluşturunuz. SQL’deki tablo sayısı kadar oluşturulmalıdır yoksa çalışmaz.

String[] kolon={“Personel Adi”, “Gidilen Şirket”, “Yapılacak İş”,”Tarih”};

//jTable1 tablomuzun adıdır.

Java ile SQL Bağlantısı

Yayınlandı: Ocak 11, 2013 / Java, SQL

1//kodlar:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

private Connection baglayici = null;
private String url = “jdbc:mysql://localhost:3306/sqldeneme”;//Veritabanımızın urlsi
private String driver = “com.mysql.jdbc.Driver”;
private String userName = “root”; //MySQL kullanıcı adı
private String password = “furkan11”; //MySQL parolası
private ResultSet personellerSonucKumesi;//Verilerin çekildiğinde saklanacağı kısım
private Statement st;//kontrol aracımız

public NewJFrame() {
initComponents();
try {
st = baglantiAc(); //veritabanına bağlanılıyor

} catch (Exception ex) {
//Hata Olusunca Yapilacaklar
JOptionPane.showConfirmDialog(null, “Bağlantı Başarısız”, “MySQL Bağlantısı”, JOptionPane.PLAIN_MESSAGE);
}
}

public Statement baglantiAc() throws Exception{
Class.forName(driver).newInstance();
baglayici = DriverManager.getConnection(url, userName, password);
return baglayici.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
}

Kodlarımızı yazdıktan sonra mysql jdbc driver’ini javadan projemize eklemeliyiz.

ProjemizinAdı>Libraries>Sağ Tık Add Library

2

Ek bilgiler : 

initComponents(); Design kısmında oluşturduğumuz araçların programda çalıştırılmasını sağlar.

JOptionPane ; Ekrana mesaj gönderir.

ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE  > Javadan SQL’de değişik yapabilmeyi sağlar.

ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY > Bu şekilde yazarsak kullanıcı sadece gelen verileri okuyabilir, değişme yapamaz.

Import etmeniz gereklidir.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;