Mevlüt Becerikli

Basit diye bir şey yok !!! Bilmeyene 2+2 bile zor…

'Java' kategorisi icin arsiv

String & StringBuffer arasındaki sıkça sorulan fark

Yazan: Mevlüt Becerikli Tarih: Oca 3rd, 2010 | Kategori:: Java

String (bknz.) :

  • String, değişmez (immutable) veri tipidir. Dolayısıyla, değişmeyen karakter dizeleri için kullanılır.
  • Biraz daha açmamız gerekirse , String tipi static olduğundan bir veri değiştirdiğimizde, yeni bir String tipinde referansa (değişkene) atama işlemini yapar. Eski referans (değişken) serbest bırakılır. Örn:

String str = “Merhaba”;
str = str.concat(“ Dünya”);

Burada 3 adet String nesnesi oluşur (“Merhaba”,” Dünya”,” Merhaba Dünya”), ikisinin referansı (“Merhaba”,” Dünya”) serbest bırakılır.

  • Görüldüğü gibi String otomatik olarak örneklenir.

StringBuffer (bknz.):

  • StringBuffer, değişebilir (mutable) veri tipidir. Dolayısıyla, değiştirilebilir karakterler için kullanılır.
  • Aynı örneği StringBuffer ile yapıp karakter işlemlerinin aynı referansta yapıldığını öğrenelim :

StringBuffer strBuff = new StringBuffer(”Merhaba “);
strBuff.append(” Dünya”);

Burada 2 adet StringBuffer nesnesi oluşur (“Merhaba”,” Merhaba Dünya”), birinin referansı (“Dünya”) serbest bırakılır. “Dünya” nesnesi “Merhaba” nesnesinin sonuna eklenir.

  • Görüldüğü gibi StringBuffer, NEW anahtar sözcüğü ile örneklenir.

İyi Çalışmalar…


String - StringBuffer arasındaki SSS fark

Yazan: Mevlüt Becerikli Tarih: Oca 3rd, 2010 | Kategori:: Java

String :

  • String, değişmez (immutable) veri tipidir. Dolayısıyla, değişmeyen karakter dizeleri için kullanılır.
  • Biraz daha açmamız gerekirse , String tipi static olduğundan bir veri değiştirdiğimizde, yeni bir String tipinde referansa (değişkene) atama işlemini yapar. Eski referans (değişken) serbest bırakılır. Örn:

String str = “Merhaba”;
str = str.concat(“ Dünya”);

Burada 3 adet String nesnesi oluşur (“Merhaba”,” Dünya”,” Merhaba Dünya”), ikisinin referansı (“Merhaba”,” Dünya”) serbest bırakılır.

  • Görüldüğü gibi String otomatik olarak örneklenir.

StringBuffer :

  • StringBuffer, değişebilir (mutable) veri tipidir. Dolayısıyla, değiştirilebilir karakterler için kullanılır.
  • Aynı örneği StringBuffer ile yapıp karakter işlemlerinin aynı referansta yapıldığını öğrenelim :

StringBuffer strBuff = new StringBuffer(”Merhaba “);
strBuff.append(” Dünya”);

Burada 2 adet StringBuffer nesnesi oluşur (“Merhaba”,” Merhaba Dünya”), birinin referansı (“Dünya”) serbest bırakılır. “Dünya” nesnesi “Merhaba” nesnesinin sonuna eklenir.

  • Görüldüğü gibi StringBuffer, NEW anahtar sözcüğü ile örneklenir.

İyi Çalışmalar…


Dizin Hafıza Bilgisi (FILE Sınıfı)

Yazan: Mevlüt Becerikli Tarih: Kas 24th, 2009 | Kategori:: Java

Java Programlama Dili ile bilgisayarınızın hafıza bilgisini görmeniz için bir kaç satırlık karalama…

Code :

File[] files = File.listRoots();
for (File f : files)
if (f.exists() && f.isDirectory()) {
System.err.println(f);
System.out.println(”TOPLAM HAFIZA : ” + f.getTotalSpace() / 1024 / 1024 / 1024) + ” GB”;
System.out.println(”BOS  HAFIZA : ” + f.getFreeSpace() / 1024 / 1024 / 1024) + ” GB”;
System.out.println(”KULLANILABILIR HAFIZA : ” + f.getUsableSpace() / 1024 / 1024 / 1024) + ” GB”;
}

Ekran Çıktısı :

C:\
TOPLAM HAFIZA (GB) : 232 GB
BOS  HAFIZA (GB) : 193 GB
KULLANILABILIR HAFIZA (GB) : 193 GB
D:\
TOPLAM HAFIZA (GB) : 232 GB
BOS  HAFIZA (GB) : 125 GB
KULLANILABILIR HAFIZA (GB) : 125 GB

İyi Çalışmalar…


Java’ da Sekizlik Sistem (Octal Numbers)

Yazan: Mevlüt Becerikli Tarih: Kas 19th, 2009 | Kategori:: Java

Kod :

ArrayList a = new ArrayList();
a.add(0);
a.add(1);
a.add(011);
a.add(012);
a.add(045);
Iterator itr = a.iterator();
while(itr.hasNext()){

Integer o = (Integer)itr.next();
System.out.println(”Array Values : “+o);

}

Sonuç :

Array Value : 0
Array Value : 1
Array Value : 9
Array Value : 10
Array Value : 37

Sizce bu işte bir terslik yok mu? Nedense kod içinde yazdığımız sayılar ile ekranda çıkanlar aynı değil gibi…
Kod içinde aşağıdaki gibi bir değişiklik yaptım ama gene değişen bir şey olmadı. Acaba neden?

add(new Integer(0));
add(new Integer(1));
add(new Integer(011));
add(new Interger(012));
add(new Integet(045));

Hemen açıklamaya çalışalım;

Bir sayının başına “0″ eklersek, bu derleyiciye bu sayının matematiksel olarak sekizlik (octal) sistemde olduğunu ifade etmektir.  Derleyici de bunu göze alarak 0-7 arasında olan her rakam bu kapsamda değerlendirir. Diğer rakamlar (08 yada 09) kabul görmez. Bu sayede Java derleyicisinin bir huyunuda öğrenmiş olduk :-)

Bu konuda (Octal Numbers) daha detaylı bilgi için aşağıdaki link güzel bir kaynak olabilir…

http://java.about.com/od/o/g/octal.htm

İyi Çalışmalar…


POI API Event

Yazan: Mevlüt Becerikli Tarih: Kas 18th, 2009 | Kategori:: Java

Tekrar merhabalar,

Daha önceden POI API si ile bir excel dökümanını okumaya çalıştığımız bir paylaşımımız olmustu. İlk izlenimlerimi paylaşmak istemiştim. Biraz daha inceleme fırsatı bulunca, POI API Event mekanizması ile tanıştım. Bu konuda da bir yazı okudum.  Biraz da Eclipste haşır neşir olunca ortaya çıkanları paylaşmak istedim.  Bu POI API Event ile ilgili ilk yazımız olcak. POI API Event‘ in en dikkat çeken avantajı, XLS dosyalarını daha az hafıza kullanarak okumasıymış.

İlk olarak, API’ yi kullanmak için önce ilgili sınıfımız HSSFListener interface’ ini implemente etmesi gerekiyor.  Bu interface bize processRecord(Record record) metodunu override etmemizi isteyecektir. Daha sonra bu metod bizim satır satır verileri almamızı ve işlememizi sağlayacak.

Bir sonraki aşamada ise, oluşturduğumuz sınıf içinde bir  HSSFRequest nesnesi örnekliyoruz. Bu nesnenin addListener metodu ile sınıfımızı register ediyoruz.

Buna paralel olarak, FileInputStream nesnesi ile XLS dosyamıza bağlantı kurup bu FileInputStream nesnesini POIFileSystem nesnesi örneklerken, constructur metoduna parametre olarak geçiyoruz.  XLS dosyamız  için örnekleyeceğimiz InputStream nesnesinin değeri olarak da, gene örneklediğimiz POIFileSystem nesnesinin createDocumentInputStream(”Workbook”) metodunu kullanarak atama yapıyoruz.

Şu aşamada, elimizde birer adet POIFileSystem ve HSSFRequest nesnesi mevcut. Bunları bi çatı altında toplayalım :-) Bu çatımızın ismi HSSFEventFactory dir. Bu sınıfın processEvents(request,inputStream) metodu bu işi yapmamıza yardımcı olur. HSSFEventFactory nesnemizin bu metoduna, POIFileSystem ve HSSFRequest nesnelerini parametre olarak geçeriz. Herhangi bir çağırımda, ilk paragrafta basettiğimiz  processRecord(record) metodu karşılayarak dosya başından sonuna kadar satır satır okuma işlemi gerçekleştirilir.

Burdan sonra gelen Record nesnemizi istediğimizi gibi kullanabiliriz. Nasıl mı ?
Onu da bir sonraki yazımızda inceleyelim ama buraya kadar ki açıklamalarımızın kodları aşağıdadır;

public static void main(String[] args) throws IOException
{
FileInputStream fin = new FileInputStream(“ornek.xls”);
POIFSFileSystem poifs = new POIFSFileSystem(fin);
InputStream din = poifs.createDocumentInputStream(“Workbook”);
HSSFRequest req = new HSSFRequest();
req.addListenerForAllRecords(new EventAPIsExample());
HSSFEventFactory factory = new HSSFEventFactory();

factory.processEvents(req, din);
fin.close();
din.close();
}
public void processRecord(Record record)
{
System.out.println(“public void processRecord(Record record)”);
}

NOT: İşlemlerimizi bitince kullandığımız Stream nesnelerimizi ( FileInputStream, InputStream ) kapatmayı unutmuyoruz…

İyi Çalışmalar…


Multiple- Function Çağırma…

Yazan: Mevlüt Becerikli Tarih: Eki 16th, 2009 | Kategori:: Java

public class Ogrenci{

private int yas;
private String ad;
private int id;

public Ogrenci  setAd(String ad){

this.ad=ad;
return this;

}
public Ogrenci  setId(int id){

this.id=id;
return this;

}
public Ogrenci  setYas(int yas){

this.yas=id;
return this;

}
public static void main(String[] args) {

Ogrenci ogr = new Ogrenci().setYas(28).setId(1).setIsim(”Mevlut”);

}

}

İyi Çalışmalar…


Excel’ den veri okumak (POI API)

Yazan: Mevlüt Becerikli Tarih: Eki 14th, 2009 | Kategori:: Java

Java dilini kullanarak, Microsoft tabanlı bir formata sahip dosyalardaki işlemler için bir başka alternatif te POI API sidir. Şu an mevcut sürümü 3.5 FINAL. Bu sürüm ile Office2007 de mevcut olan OOXML formatlı dosyalar da (DOCX, SLSX gibi) kadroya dahil oldu :)  Bu yazı, size sadece excel’ den nasıl veri okunabileceği hakkında fikir verecektir.

Excel dökümanımızın görüntüsü şu şekilde olsun;

Bunu okuyacak kodumuz da şu şekilde olacaktır.

Kodu satır satır açıklamaya girmicem ama kendi düştüğüm komik bir olayı paylaşayım. Burda BOOLEAN tipini test ederken bir türlü istediğim sonucu alamadım. Hep STRING olarak algılıyordu. Sonra öğrendim ki MS OFFICE programınızın dil ayarı önemli :) Ben TRUE/FALSE denerken aslında DOĞRU/YANLIŞ olması gerektiğini gördüm. Almanca denemek isteyenler içinde WAHR/FALSCH değerlerini kullanın :-)))

Çıktıyı unutmayalım;

Detaylı bilgi için http://poi.apache.org/ linkini ziyaret edebilirsiniz.
Önceki sürümlere göre tüm değişiklikleri içinm ise; http://poi.apache.org/changes.html
Gerekli kod kütüphanelerine de; http://www.apache.org/dyn/closer.cgi/poi/release/

İyi Çalışmalar…


CSV dosyası oluşturma

Yazan: Mevlüt Becerikli Tarih: Eki 13th, 2009 | Kategori:: Java

CSV (Comma Seperated Values) dosya formatı, her kaydın yeni satırla gösterildiği ve her kaydın sütunlarının (alanlarının) birbirinden virgül (,) ile ayrıldığı verilerden oluşur. Örnek bir CSV dosyası içeriği aşağıdaki gibidir.

Ad, Soyad, Yas, Telefon
Mevlüt, Becerikli, 28, 0533
Melih, Sakarya, 30, 0532

Şayet herhangi bir programlama dilinde dosya işlemleri ile biraz alakanız olduysa bunun oluşturulmasınında ne kadar kolay oldugunu tahmin edebilirsiniz. Bu dosyayı oluşturacak java kodu aşağıdadır;


package com.mevlutbecerikli.test;

import java.io.FileWriter;
import java.io.IOException;

public class GenerateCVS {

public static void main(String[] args) {
try {
FileWriter writer = new FileWriter(”c:\\test.csv”);

writer.append(”Ad”).append(’,');
writer.append(”Soyad”).append(’,');
writer.append(”Yas”).append(’,');
writer.append(”Telefon”).append(’\n’);

writer.append(”Mevlüt”).append(’,');
writer.append(”Becerikli”).append(’,');
writer.append(”28″).append(’,');
writer.append(”0533″).append(’\n’);

writer.append(”Melih”).append(’,');
writer.append(”Sakarya”).append(’,');
writer.append(”30″).append(’,');
writer.append(”0532″).append(’\n’);

writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

Sonuç ;

İyi Çalışmalar…


Hibernate’ te Sorgular…

Yazan: Mevlüt Becerikli Tarih: Eki 13th, 2009 | Kategori:: Hibernate, Java

Bir ORM Framework’ ü olan Hibernate ile veritabanımızı 3 şekilde sorgulayabiliriz…

  1. session.createQuery()

    HQL syntax’ ını kullanarak sorgu nesnelerimizi oluşturabiliriz. Örn;

    Query sorgu = session.createQuery(”from Ogrenci s where s.ad like ‘k%’ “);

  2. session.createSQLQuery()

    SQL syntax’ ını kullanarak sorgu nesnelerimizi oluşturabiliriz. Örn;

    Query sorgu = session.createSQLQuery(”Select * from Ogrenci”);

  3. session.createCriteria()

    Criteria API‘ sini kullanarak basit, parametrik, karmaşık tüm sorgularımı çalıştırabiliriz.
    Sorgu ifadelerini elle yazmak istemeyenler için oldukça kullanışlıdır. Örn;

    Criteria criteria = session.createCriteria(Ogrenci.class)

İyi Çalışmalar…


JDBC & Hibernate arasındaki 11 fark …

Yazan: Mevlüt Becerikli Tarih: Eki 12th, 2009 | Kategori:: Hibernate, Java
  1. Hibernate veritabanından bagımsızdır. Kodunuz Oracle, MySQL, SQLServer..vs. farketmez hepsi için çalışacaktır. JDBC sorguları ise veritabanına özel olabilir.
  2. Hibernate, nesneler bütünü olduğundan SQL dilini öğrenmek zorunda deilsiniz. Sadece java dili bilgisi yeter. Bir tabloyu bir nesne olarak oluşturup Hibernate aracılığı ile veritabanında oluşturabilirsiniz. JDBC ile programlama SQL bilgisi gerektirir.
  3. Hibernate ile SQL şart olmadığından SQL ifadelerinin tuning işlemini de düşünmemize gerek kalmıyor. Hibernate özelliği olan Criteria Queries ile yaptığınız sorgular, Hibernate otomatik olarak performans ayarlamasını yapıp olası en iyi performansı size sağlayacaktır. JDBC seçeneğinde ise SQL inizi tune etme gibi bir ihtiyaç vardır.
  4. Hibernate ‘ in bir diğer özelliğide sunduğu Cache mekanizmasıdır (2 seviyeli). Bu mekanizma, verimizi daha performanslı saklamamızı ve kullanmamızı sağlayacaktır. JDBC ile yapılan uygulamalarda programlama tarafında kendi Cache mekanizmamızı kurmamız gerekecektir.
  5. Hibernate, yaptığımız sorgularıda Cache işlemine tabi tutabilmektedir. Bu sayede, hem veritabanının durumu hem de sorgularımız hakkında faydalı olabilecek istatistiksel bilgileri bize verir. JDBC‘ nin bize istatistiksel açıdan bir getirisi yoktur.
  6. Hibernate ile sorgu yazmamıza gerek olmadığından daha hızlı development yapabiliriz.
  7. Hibernate ile bağlantı havuzu (connection pool) oluşturma gibi bir ihtiyacımız yoktur.  c3p0 ı kullanabiliriz. JDBC ile kendi bağlantı havuzumuzu yazmamız gerekecektir.
  8. XML formadında olan Hibernate konfigurasyon dosyasından tablolar arası tüm ilişkileri rahatlıkla görebilir ve okuyabiliriz.
  9. “lazy=false” ifadesini kullanarak nesneleri başlangıçta yükleyebiliriz. JDBC nin böyle bir desteği yok.
  10. Hibernate, otomatik olarak kayıtları versiyonlamamızı sağlar ama JDBC de bu da yok.
  11. Hibernate‘ in, Search işlemleri ile için Java tabanlı Text Indexleme ve Full-Text Search motoru olan LUCENE ile halihazırda entegrasyonu mevcuttur. JDBC ile bunu da kendimiz implemente etmemiz gerekecektir.


Not :
Bu maddeler hibernate’ i kullanmamız için sebep gibi gözükse de, Hibernate’ in de dezavantajları mevcut olup seçim tamamen ihtiyaçlarımıza göre değişmektedir. Benimkisi sadece fikir sahibi olmanızı sağlamak…

İyi Çalışmalar…