About sumeyyegorgulu

Çanakkale On Sekiz Mart Üniversitesi Bilgisayar Mühendisliği bölümünden mezun oldum.Öğrendiğim yeni bilgileri burada paylaşmaya çalışıyorum.

JPA (Java Persistence API) Nedir?

Java-persistence

JPA; bir ORM apisidir. Çeşitli uygulamaları bulunan bir özelliktir. JPA ile geliştiriciler;Java nesneleri ile ilişkisel veritabanından veri çekebilirler.Ve ya tam tersi olarak nesneler ile veritabanına veri alımı yapabilirler.

  • JPA,geliştiricilere SQL ifadeleri yazmadan direkt nesneler ile çalışmaya izin verir.
  • JavaEE ve JavaSE uygulamalarında kullanılır.
  • Java nesneleri ve ilişkisel veritabanındaki haritalama; persistence metadata ile tanımlanır.
  • JPA metadatayı genellikle Java sınıflarındaki annotations’lar ile tanımlar. Alternatif olarak XML ve ya her ikisi birlikte kullanılarak tanımlanabilir. XML yapılandırması annotations’ların üzerine yazılır.

Beğensek de beğenmesek de,veri nesne yönelimli programlamanın ayrılmaz bir parçasıdır.Geliştiriciler geleneksek SQL sorguları yazmak zorunda olduğunda,uygulama büyüdükçe yönetilemez bir hale gelir ve kalıcı katmandaki her şey durur.Eğer bu sorguları nesnelerle kontrol edebilirsek,vekapsülleme(encapsulation),soyutlama(abstraction),kalıtım(inheritance),çok biçimlilik(polymorphism ) gibi nesneye yönelik programlama yaklaşımlarını onlara uygulayabilirsek ne kadar güzel olur.Böyle bir soyutlama ile altta yatan veri deposunun karmaşıklığını gizleyebiliriz!

Aslında Java çok sayıda kalıcı veri için pek çok yaklaşım üretti: EJB, JDO, Hibernate, and Toplink gibi.Bunlar bu çözümü başardı.JPA  standart kalıcı api olarak Java EE 5 platformunun bir parçası olarak tanıtıldı.JPA Java 5 ve ya daha yüksek bir Java versiyonunda kullanılabilir.

Neden JPA?

Pek çok Java geliştiricisi için en temel sorulardan biridir.”Niçin JPA?Neden Hibernate,EclipseLink gibi ORM apileri kullanılabilirken  JPA bilmem gerekir?” Cevap yeni bir teknoloji olması değildir.Bunun yerine Hibernate,TopLink gibi mevcut kalıcı teknolojilerinin en iyi fikirlerini içerisinde toplamasıdır.Sonuç olarak,herhangi bir kalıcılık sağlayıcıdan bağımsız, persistence katmanı oluştumak için standart bir özelliktir.

JSP İle Çalışmak İçin Neler Gerekli? JSP Projesi Oluşturma

Öncelikle bilgisayarımızda Java programlarımızı yazıp,derleyip,çalıştırmak için  JSDK (Java Software Development Kit)’nın kurulu olması gerekir.Linkten temin edebilirsiniz:http://www.oracle.com/technetwork/java/javase/downloads/index.html

İkinci olarak JSP’yi destekleyen bir web sunucusu. (Ben Apache Tomcat kullanıyorum)

Üçüncü olarak java kodlarınızı yazıp, derleyebileceğiniz bir IDE.(Ben Netbeans kullanıyorum.)

Ve son olarak da bilgisayarımızda yüklü olan bir tarayıcı(browser).

Tüm bu aşamaları tamamladıysak artık bir Jsp projesi oluşturabiliriz. Netbeans IDE’mizi açalım

File>>New Project diyoruz. Daha sonra karşımıza gelen ekrandan (fotoğrafta görüldüğü gibi) , proje türünü Java Web seçiyoruz. Next diyerek ilerliyoruz.

newJSP

 

Bir sonraki adım ise projemize isim vermek olacaktır.

newWeb2

İsim verme işlemimiz de bittiğinde Next diyerek devam ediyoruz.

newJSP3

Bilgisayarımıza daha önceden yüklediğimiz ve Netbeans IDE’sine tanıttığımız Apache Tomcat sunucusu otomatik olarak geldi. Farklı bir sunucuda çalışmak istiyorsak Add butonuna tıklayarak , yeni bir sunucu ekleyebilir ve o sunucuda çalışabiliriz.Tekrar Next diyerek devam ediyoruz.

newJsp4

Projemizde aşağıda bulunan çatı(framework)lardan kullanmak istersek, burada seçerek, projemize ekleyebiliriz. Şu aşamada gerek yok. Hiç birini seçmeden Finish diyerek proje oluşturmamızı tamamlayabiliriz.

MyWebApplication

 

 

Evet Jsp kodlarımızı yazabileceğimiz jsp uzantılı index dosyamız artık ekranımızda. Görüldüğü üzere içerisinde HTML takıları yer almakta.  Java kodlarının nerede bulunması gerektiğini, jsp takılarından daha sonraki yazılarımda bahsedeceğim. Öncelikle bu projemizi bir çalıştıralım.

myWebApp2Projemizin bulunduğu alana(sarı ile seçili olan) gelip bir kere mouse ile sağa tıklayarak , gelen listeden Run’ı seçiyoruz.

 

MYWEBAPP3Ve Web sayfamız 8080 portunda çalıştı (:

 

 

 

 

JSP Nedir?

Bu yıl stajda benden istedikleri masaüstü uygulamasını yaptıktan sonra bir de web uygulaması yapmam istendi. Yapıp yapamayacağımı sorduklarında, web uygulamaları hakkında hiç bir fikrim olmadığı halde yapabilirim dedim. İyi ki de demişim. Bu sayede web uygulaması geliştirirken hangi teknolojileri,çatıları(framework) kullanabileceğimi öğrendim. Öncelikle java ile web programlamayı araştırdım. Nerden başlamalıydım ? Bunun için Netbeans kullanılabilir miydi ? Az önce de belirttiğim gibi bu alanda hiç bir şey bilmiyordum. 2.sınıfta web programlama dersi almıştım ama, HTML tagleri, javascript fonksiyonları  ve bir de slayt ezberlemek dışında pek de ileriye gidememiştik (:

Araştırdıkça karşıma pek çok seçenek çıktı. CGI, JSF, JSP, Java EE, Java Start, Servlets… En çok JSF,JSP ve Servlets dikkatimi çekti. En sonunda uygulamayı JSP’de yazmaya karar verdim. Bunda JSP’nin çok yeni bir teknoloji olması, ve bana daha az karmaşık gelmesinin etkisi büyük. Başlangıç için iyi olabileceğini düşündüm. Daha sonra JSF ile ilgilenmeyi de düşünüyorum.

Şimdi ise JSP’yi kısaca anlatmaya çalışayım. Jsp dinamik web sayfaları oluşturmamızı yarayan teknolojidir. JSP; HTML kodları içerisine yazılır.HTML ile Java programlama dilinin birleştirilmesiyle oluşturulmuş bir teknoloji olarak düşünebiliriz. Sayfada bulunan java kodları çalışacak programın mantığını oluştururlar. Geriye kalan ise HTML kodlarıdır ki bu da görselliği sağlar.Bir web sayfasında ne yapmak istiyorsak JSP kullanarak yapabiliriz. Peki avantajları nelerdir? Statik HTML kodlarıyla, dinamik içeriği oluşturulan kodları aynı sayfada tutabiliriz(Bu çok hoşuma gitmişti).J2EE platformunu destekleyen ortamalarda JSP ile birlikte bu teknolojiden faydalanabiliriz.  JSP farklı platformlarda ve farklı sunucularda çalışabilir. JSP de kendi takılarımızı(tag) oluşturabiliriz.

JSP’ye dair ne öğrendiysem(öğrenmeye de devam ediyorum), burada anlatmaya çalışacağım. Umarım birilerine faydası olur(:

Netbeans’de String Olarak Girilen Tarihi SQL Date Tipinde Veri Tabanına Ekleme

Ayır

TARIH_VERITABANI isimli,içerisinde Date tipinde TARIH alanı olan bir tablomuz olsun.

Görsel

Basit bir kullanıcı arayüzünde bulunan bir text alanına string veri tipinde girilen bir tarihi, TARIH_VERITABANI isimli tablonun TARIH isimli alanına Date tipinde ekleyelim.

Kullanıcı arayuzu:

Görsel

Öncelikle Netbeans’de Oracle sürücüsü yüklü olmalı. Buradan yardım alabilirsiniz:https://sumeyyegorgulu.wordpress.com/2013/09/03/netbeans-oracle-baglantisi/ Daha sonra kullandığımız projenin kütüphanesine Oracle jarı eklenmelidir.

Şimdi Ekle butonuna çift tıklayarak, Ekle butonunun olay metodunu açıyoruz. Veri tabanında işlem yapacağımız için öncelikle veri tabanı bağlantısını kurmamız lazım.

private void ekleActionPerformed(java.awt.event.ActionEvent evt) {
String Driver = “oracle.jdbc.OracleDriver”;
String DBURL = “jdbc:oracle:thin:@localhost:1521:XE”;
String DB = “ORNEK”;
String User = “Ornek”;
String Password = “1”;
Connection conn = null;
try {
Class.forName(Driver).newInstance();//Driver yüklendi
if (conn == null) {
conn = DriverManager.getConnection(DBURL, User, Password);
}
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, “Baglanilamadi”);
}
try {
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet res = st.executeQuery(“select tarih from tarih_veritabani”);
res.moveToInsertRow(); //Yeni satır eklendiğinde imlecin yerini değiştirir, satırlar arasında dolaşmayı sağlar bir nevi
DateFormat format = new SimpleDateFormat(“dd/MM/yyyy”);  // Tarih formatı belirlendi
java.util.Date tarihJava = format.parse(textTarih.getText()); //parse metoduyla string olarak girilen tarih, Date tipine cevirildi ve tarihJava değişkenine atandı.
java.sql.Date tarihSql = new java.sql.Date(tarihJava.getTime()); // Javada bulunan Date tipindeki tarihJava değişkeni Sql Date tipine çevirildi, tarihSql değişkenine atandı.
res.updateDate(“TARIH”, tarihSql); // Son olarak da elde edilen tarih veritabanında güncellendi.
res.insertRow(); //Satır eklendi.
res.moveToCurrentRow();
System.out.println(“Row inserted ok.”);
JOptionPane.showMessageDialog(rootPane, “Basarıyla eklendi”);
} catch (Exception e) {
e.printStackTrace();
}
}

DateFormat tarih/saat biçimlendirme alt sınıfları için tarih ve ya saati biçimlendiren ve ayrıştıran bir soyut sınıftır.  SimpleDateFormat alt sınıfı ise  biçimlendirme (idate -> text), ayruştırma (text -> date), ve normalizasyona izin verir.

tarihBasari           1995

ORACLE Nvl ve Coalesce Fonksiyonları

sira

Böyle bir arayüzümüz olsun. Sıra Numarası program çalıştığı an dinamik olarak veritabanında tutulan hasta_nakil tablosundaki sirano isimli alandan  ekrana gelsin. Bunun için şu kodu yazmamız yeterli olur diye düşünebiliriz:

Statement st = null;

Resultset res; st = connection.createStatement();

res = st.executeQuery(“select max(sırano)+1 sayı from hasta_nakil”);

while (res.next()) {

jTextField14.setText(res.getString(“SAYI”));

}

Her ne kadar bu sorgu mantık olarak doğru olsa da , hasta_nakil tablosunda  hiç bir veri yoksa (null ise) program hata verecektir. Bunu gidermek için Oracle da bulunan bu fonksiyonlar kullanılabilir. select nvl(max(sirano),0)+1 from hasta_bakil select COALESCE(max(sirano), 0)+1 sayı from hasta_nakil Bu iki fonksiyonda sorgu null döndürdüğü zaman null’un değerine 0’ı atayarak işleme devam ederler. Burada 0 yerine 1,2,3 vs de yazılabilir. Çıktı da ona göre değişir. Sadece integer değil String parametre de alabilirler. Yalnız burada max fonksiyonunda bir toplama işlemi olduğundan string veri ile hata verir.

Coalesce fonksiyonunun Nvl fonksiyonundan farkı ise  Coalesce fonksiyonu aldığı parametrelerden null olmayan ilk ifadeyi döndürür.

Dinamik Tabloya Veritabanından Veri Çekme

Veritabanımızda HASTA_BILGILERI isimli tablomuz olsun. Şimdi bu tablodaki verileri  netbeansde oluşturduğumuz dinamik tabloya çekeceğiz. Tablonun boyutu veritabanındaki HASTA_BILGILERI isimli tablonun satır ve sutun sayısına göre değişeceği için tablomuzu kod ile oluşturacağız. Öncelikle basit bir arayüz tasarlayalım. Siz istediğiniz şekilde tasarımı yapabilirsiniz.

Arayuz

 

Burada arama butonuna tıkladığımız anda, küçük bir ekran açılarak veritabanımızda tutulan HASTA_BILGILERI tablomuz gelicek, biz de bu tablodan seçmek istediğimiz veriyi seçip, arayüzde bulunan labellara yazdıracağız.
Öncelikle açılacak küçük ekranı kodlayalalım.

class HASTALIK_BILG_TABLO extends JFrame {
Statement st = null;
public ResultSet r;
public JTable table;
String Data = null;
public HASTALIK_BILG_TABLO() throws SQLException {
if (Baglanti.conn == null) {
Baglanti.dbBaglan();
Statement st = null;
st = Baglanti.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);//databasede sorgu yapabilmek için ifade oluşturuyor
// ilk parametre gezinme diğeri güncelleme için.
r = st.executeQuery(“SELECT * FROM ORNEK.HASTA_BILGILERI”);
} else {
r = st.executeQuery(“SELECT * FROM ORNEK.HASTA_BILGILERI”);
}
this.setSize(200, 200);
Toolkit tk = this.getToolkit();
Dimension dim = tk.getScreenSize();
int x = (dim.width – 200) / 4;
int y = (dim.height – 200) / 4;
this.setLocation(550, 85);
DefaultTableModel model = createModel(r);
table = createTable(model);
table.setCellSelectionEnabled(true);
ListSelectionModel cellSelectionModel = table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
int[] satir = table.getSelectedRows();
int[] sutun = table.getSelectedColumns();
for (int i = 0; i < satir.length; i++) {
for (int j = 0; j < sutun.length; j++) {
Data = (String) table.getValueAt(satir[i], sutun[j]);
}
}
}
});
JScrollPane jsp = new JScrollPane(table);
this.add(jsp);
}
public DefaultTableModel createModel(ResultSet rest) throws SQLException {
DefaultTableModel dtm = new DefaultTableModel();
ResultSetMetaData rsmd = rest.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
dtm.addColumn(rsmd.getColumnName(i));
}
Vector rows;
while (rest.next()) {
rows = new Vector();
for (int j = 1; j <= rsmd.getColumnCount(); j++) {
rows.addElement(rest.getString(j));
}
dtm.addRow(rows);
}
return dtm;
}
public JTable createTable(DefaultTableModel dm) {
JTable table = new JTable(dm);
return table;
}
}

Artık veritabanımızda tutulan HASTA_BILGILERI isimli tablomuzu netbeans ile dinamik bir şekilde çekebiliyoruz. Şimdi ise arama butonuna tıkladığımız zaman oluşturduğumuz bu Frame’i ekrana çağıralım. Öncelikle Design kısmından arama butonuna  çift tıklıyoruz. Ve butonu tetikleyecek olan eylem(action) metodu açılıyor.  Bu metotda öncelikle HASTALIK_BILG_TABLO sınıfına ait olan bir nesneyi oluşturmamız ve çağırmamız gerekiyor.

final HASTALIK_BILG_TABLO hbt = new HASTALIK_BILG_TABLO();
hbt.setVisible(true);

Artık butona tıkladığımızda , ekrana veri tabanımızdaki tablo geliyor.

tablo

 

Şimdi ise geriye yalnızca, bu tablodan seçilen veriyi label’e yazdırma işlemi kaldı.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

try {
final HASTALIK_BILG_TABLO hbt = new HASTALIK_BILG_TABLO();
hbt.table.setCellSelectionEnabled(true);
ListSelectionModel cellSelectionModel = hbt.table.getSelectionModel();
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
hbt.setVisible(true);
cellSelectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
try {
int[] selectedRow = hbt.table.getSelectedRows();
int[] selectedColumns = hbt.table.getSelectedColumns();
for (int i = 0; i < selectedRow.length; i++) {
for (int j = 0; j < selectedColumns.length; j++) {
hbt.Data = (String) hbt.table.getValueAt(selectedRow[i], selectedColumns[j]);
}
}
jLabel2.setText(hbt.Data);
int kod = Integer.parseInt(hbt.Data);
hbt.st = Baglanti.conn.createStatement();
hbt.r = hbt.st.executeQuery(“SELECT HASTALIK_BILGILERI FROM ORNEK.HASTA_BILGILERI where HASTA_KODU='” + kod + “‘”);
while (hbt.r.next()) {
jLabel3.setText(hbt.r.getString(“HASTALIK_BILGILERI”));
}
} catch (SQLException ex) {
Logger.getLogger(HASTALIK_BILGILERI.class.getName()).log(Level.SEVERE, null, ex);
}
}
});

} catch (SQLException ex) {
Logger.getLogger(HASTALIK_BILGILERI.class.getName()).log(Level.SEVERE, null, ex);
}
}

tablo2

Netbeans Oracle Veritabanı Bağlantısı

Bir önceki yazımda netbeans’e oracle sürücüsünün nasıl yüklendiğini anlatmıştım. Veri tabanına bağlanabilmemiz için öncelikle bu işlemi gerçekleştirmemiz gerekmektedir. Buradan ulaşabilirsiniz: https://sumeyyegorgulu.wordpress.com/2013/09/03/netbeans-oracle-baglantisi/

Öncelikle oluşturduğumuz projemizde Libraries klasörüne oracle sürücü jarını eklememiz gerekmekte. Libraries klasörüne sağ tıklayarak Add Jar/Folder’ı seçerek önceden yüklediğimiz oracle sürücüsünü projemize ekliyoruz. Ben oracle veri tabanını kullandığım için bu sürücüyü ekliyorum, hangi veri tabanını kullanıyorsanız; o veri tabanına ait sürücüyü ekleyerek işleminize devam edebilirsiniz.

Pojemizde Baglanti isimli yeni bir sınıf oluşturuyoruz. Veri tabanı bağlantisini sağlamak için bu sınıfa şu kodları yazıyoruz:

public class Baglanti {
private static String Driver=”oracle.jdbc.OracleDriver”;
private static String DBURL=”jdbc:oracle:thin:@localhost:1521:XE”;
private static String DB=”ORNEK”;
private static String User=”Ornek”;
private static String Password=”1″;
public static Connection conn;  // Bağlanti tipinde conn değişkeni
public static void dbBaglan() {
try {
Class.forName(Driver).newInstance();//Driver yüklendi
if(conn==null){
conn= DriverManager.getConnection(DBURL, User, Password);
JOptionPane.showMessageDialog(null, “Baglandi”);
}
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, “Baglanilamadi”);
}
}
public static Connection getConnection(){
if(conn==null){
dbBaglan();
}
return conn;
}
public static void kapat(){
if(conn!=null){
try{
conn.close();
JOptionPane.showMessageDialog(null, “Kapatildi”);
}catch(SQLException ex){
ex.printStackTrace();
}
}
}}

DB değişkeni kullandığımız veritabanı ismini, User değişkeni ise kullandığımız kullanıcının ismini, Password değişkeni ise bu kullanıcıya ait olan parola içeriğini tutmakta. Driver ve DBURL değişkenlerinin içeriğini ise şu şekilde elde ediyoruz:

DriverName

Netbeans’de Services kısmına gelip Databases kısmını açıyoruz. Database Connection kısmınını(sol taraf)  seçip sağ tıklayarak Properties’i açıyoruz. DBURL değişkeninin içeriği Database URL’ ye ; Driver değişkeninin içeriği ise Driver özelliğine karşılık geliyor.

Artık veri tabanına bağlanabiliriz.  Bağlantıyı yapmak istediğimiz sınıfta Baglanti sınıfına ait bir nesne oluşturup, bu nesne ile dbBaglan metodunu çağırmamız yeterli.

Baglanti baglanti=new Baglanti();
baglanti.dbBaglan();
baglanti.kapat();

Netbeans Oracle Sürücü Yükleme

Bilgisayarımızda Oracle veritabanının kurulu olduğunu varsayıyorum. Oracle veri tabanında tuttuğumuz tabloları Netbeans ile kullanabilmemiz için öncelikle Netbeans’e Oracle sürücüsünün yüklenmesi lazım. Buradan sürücüyü indirebilirsiniz: http://ww.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Daha sonra Netbeans’de Services bölümünde Databases kısmını seçtikten sonra New Connection diyoruz.Görsel

Görüldüğü gibi Driver File(s) bölümünde hiçbir sürücü yok. Add butonu ile indirdiğimiz sürücüyü ekliyoruz ve yukarıda bulunan Driver seçeneciğinde Oracle Thin ve ya Oracle OCI sürücüsünü seçiyoruz.

 Görsel

Burada ise Oracle’ı hangi portta çalıştırıyorsak Port kısmına bu bilgiyi yazıyoruz. (Kendisi zaten otomatik olarak gelmekte ama kontrol etmekte fayda var.) User Name kısmına Oracle’da ki User ismini, Password kısmına ise bu User’a karşılık gelen parolamızı yazıyoruz. Test Connection diyerek bağlantıyı test ediyoruz. Herhangi bir hata almazsak  Finish diyerek  sürücü yükleme işlemimizi halletmiş oluyoruz.

İyi çalışmalar, kolay gelsin…