27 Şubat 2013 Çarşamba

Oracle sql with kullanımı


Oracle sql with kullanımı
With kullanımı Prosedürlerdeki cursor gibi düşünebiliriz.
Bir örnek üzerinde gerçekleştirelim.
Öğrenci tablosu (OGRENCI)
OGRENCI_ID     OGRENCI_ADI
1                            Ahmet
2                            Ayşe
3                            Hasan


Ders tablosu (DERS)
DERS_ID              DERS_ADI
1                            Matematik
2                            Tarih
3                            Türkçe


Bir dersi alan Öğrenci tablosu (OGRENC_DERS)
DERS_ID              OGRENCI_ID
1                                     1
1                                     2
1                                     3
2                                     1
2                                     3
3                                     2
3                                     3


Ders alan öğrencilerin sql’ini yazalım.
Select  od.OGRENCI_ID,d.DERS_ADI, d. DERS_ID
From  OGRENCI_DERS od ,DERS d
Where  od.DERS_ID=d.DERS_ID


Öğrenci numaralarıyla ders isimlerini listeledik. Bizim buradaki isteğimiz  bir öğrenciye ait ders bilgilerini alt alta getirmek yerine yan yana getirmeyi sağlamak olacaktır. Yukarıdaki sql cümleciğini with aralığına alacağız.

Son sql hali

With tablo as
(
Select  od.OGRENCI_ID,d.DERS_ADI,d. DERS_ID
From  OGRENCI_DERS od ,DERS d
Where  od.DERS_ID=d.DERS_ID
)
Select  o.OGRENCI_ADI,
(select t.DERS_ADI from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =1)  as DERS1,
(select t.DERS_ADI from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =2)  as DERS2,
(select t.DERS_ADI from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =3)  as DERS3,
From OGRENCI o

Sql Sonucu

OGRENCI_ADI       DERS1                    DERS2                    DERS3
AHMET                  MATEMATİK         TARİH                     NULL
AYŞE                       MATEMATİK         NULL                      TÜRKÇE
HASAN                   MATEMATİK         TARİH                     TÜRKÇE

24 Şubat 2013 Pazar

Java Adaptör Tasarım Deseni Örneği

Date(tarih) değerini göndererek bize formatını getiren Adapter tasarım deseni örneğini yapacağız.
Bu örnekte Date değerinin Web Servis,Veritabanı vb. yoluyla gelen bir değer olarak düşünebiliriz.
Gelen date değerinin formatı elde edebiliriz.

Nesnelerimiz SimpleDateFormat nesnelerinin aldığı constructor parametresiyle oluşturduk.
Örneğin
-1.nesne dd.MM.yyyy parametreli
-2.nesne dd/MM/yyyy parametreli
-3.nesne dd:MM:yyyy parametreli

import java.util.Date;
import java.text.SimpleDateFormat;


class DateFormatAdapter{
private SimpleDateFormat dt=null;
private String format1="dd.MM.yyyy";
private String format2="dd/MM/yyyy";
private String format3="dd:MM:yyyy";
public String getFormat(Date d){
try {
dt=new SimpleDateFormat(format1);
dt.format(d);
return format1;
} catch (Exception e) {
try {
dt=new SimpleDateFormat(format2);
dt.format(d);
return format2;
} catch (Exception e2) {
try {
dt=new SimpleDateFormat(format3);
dt.format(d);
return format3;
} catch (Exception e3) {
return "";
}
}
}
}
}


Adapter nesnemizin testi aşağıdaki gibidir.

import java.util.Date;
import java.text.SimpleDateFormat;

public class TestClass {
public static void main(String[] args) throws Exception{
DateFormatAdapter adapter=new DateFormatAdapter();

Date d=new Date(); //Tarihi elle tanımladığımızda varsayılan formatı ekranı yazdıracaktır.
  //Format dd.MM.yyyy olacaktır.
System.out.println(adapter.getFormat(d));
}
}

21 Şubat 2013 Perşembe

Oracle tablo döndüren fonksiyon

Aşağıdaki adımları sırayla uygulayacağız.


1.Oracle Type oluşturma
create or replace type ornekType as object (
i number,
n varchar2(30)
);

2.Oracle Nested Type oluşturma
create or replace type Ornek_nested_table as table of ornekType;
3.Fonksiyon oluşturma
create or replace function ornekFonksiyon return Ornek_nested_table as
  temp_tab   Ornek_nested_table;
begin
  temp_tab:= Ornek_nested_table();
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(1, 'Ahmet');
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(2, 'Ayşe');
  temp_tab.extend;
  temp_tab (temp_tab.count) := ornekType(3, 'Hasan');
  return temp_tab;
end ornekFonksiyon;
4.Oluşturulan tabloyu sql içerisinde kullanmak
select * from table(ornekFonksiyon);
sql sonucu
1 Ahmet
2 Ayşe
3 Hasan



Fonksiyonun parametreli hali.Fonksiyona kaydın id’si parametre ile verilerek kaydın getirilmesi
create or replace function ornekFonksiyon2(
  personel_id in number
)
return Ornek_nested_table as
  temp_tab Ornek_nested_table;
begin
  select 
  cast(
  multiset(
    select 
      id, name
    from 
      personel
    where id= personel_id)
    into
      temp_tab
    from 
      dual;
  return temp_tab;
  
end ornekFonksiyon2;
Sql'i bu şekilde olur.Sonucu "1 Ahmet"
select * from table(ornekFonksiyon2(1));

15 Şubat 2013 Cuma

Veritabanından Blob veya Clob Veri Türlerini Java ile okutmak

Veritabanınlarıda veri tipi Blob veya Clob olan

datayı aşağıdaki metodlara parametre olarak

gönderip Metin olarak elde edebiliriz.

Clob için
----------------------------------------------------------------
public String readClob(Clob data) throws Exception
{
StringBuilder sb = new StringBuilder();
try {
Reader reader = data.getCharacterStream();
BufferedReader br = new BufferedReader(reader);

String line;
while(null != (line = br.readLine())) {
sb.append(line);
}
br.close();
} catch (SQLException e) {
// handle this exception
} catch (IOException e) {
// handle this exception
}
return sb.toString();
}


Blob için
----------------------------------------------------------------


public String readBlob(Object clob1) throws Exception
{
Blob clob=(Blob) clob1;
InputStream is = clob.getBinaryStream();
StringBuffer sb = new StringBuffer();

int readedBytes;
int bufferSize = 4096;

do {
byte[] bytes = new byte[bufferSize];

readedBytes = is.read(bytes);

if (readedBytes > 0) {
String readed = new String(bytes, 0, readedBytes, "UTF-16");
sb.append(readed);
}
} while (readedBytes == bufferSize);

is.close();
return sb.toString();
}

13 Şubat 2013 Çarşamba

Oracle sql sorgusunu xml e çevirmek

Veritabanı tablolarımızda bazen hiyerarşik veriye ihtiyaç duyarız.
Aşağıda daha önce verdiğim bir örnek üzerinde gidelim.
----------------------------------
Örnek Tablo=Personel
tablo sütunları sırasıyla
Personel_id,Personel_adi,Bagli_Personel_id

Veriler
-------------------------------------------------------------
0 'Üst personel' -1
1 'Murat' 0
2 'Ahmet' 1
3 'Mehmet' 1
4 'Duygu' 1
5 'Ayşe' 4
6 'Ali' 4


Bu tablodan da gördüğümüz gibi Murat personeline bağlı 3 personel var.Bu 3 personelden Duygu ya bağlı 2 personel var.Bu bilgileri hiyerarşik olarak getirmek
istiyorsanız aşağıdaki oracle sql yazıyoruz.

select Personel_adi
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id

Sqlden gelen sonucu xml le çevirmek istiyorsak aşağıdaki gibi yazabilirsiniz.

select xmlelement("PERSONEL_LISTESI",
(select dbms_xmlgen.getxmltype(dbms_xmlgen.newcontextFromHierarchy('
select LEVEL,xmlelement("Personel_adi",xmlelement("Personel_adi",Personel_adi ))
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id
order siblings by Personel_adi
'))
from dual)
) xmldoc
from dual

10 Şubat 2013 Pazar

Java Tabanlı Web Uygulamaların Genel Mantığı

Java Tabanlı Web Uygulamaların Genel Mantığı
Java web uygulamalarında genel olarak 2 dizin mevcuttur.
Dizinler
*.Src
*.WebContent
1.Src dizininde java kaynak kodları bulunmaktadır. Bu dizinde yazılan kodlar mevcuttur.
Dilerseniz dizin altında farklı dizinler oluşturabilirsiniz. Farklı dizinler projenin kaynak kodlarının düzenli olmasını sağlar.
2. WebContent dizini sunucu tarafında çalışan kısımdır. Bu dizin altında standard olarak WEB-INF dizini mevcuttur. WEB-INF dizini altında sabit olarak oluşan dizinler ve dosyalar mevcuttur.
-classes dizini
Src dizini altında yazdığınız kodların derlenmiş dosyaları oluşur.Yani uzantısı java olan her sınıfın
bu dizin altında class uzantısı oluşur. Src dizini altında yazdığınız kodların derlenmiş kodları oluşmamış ise programı oluşturduğunuz ortamda derlemeniz gerekmektedir.Örneğin Eclipse ortamında Project—>Build All şeklinde yapabilirsiniz.
-lib dizini
Bu dizin altında farklı frameworkler(Spring vb.) kullanmış veya 3.parti uygulama kullanıyor iseniz kütüphanelerini burada tutabilirsiniz. Kütüphaneler jar uzantılıdır. Uygulama ile gelen kütüphaneler mevcuttur ve bu kütüphanelerin jar dosyalarını bulundurmanız gerekmeyebilir.Ör:jre
-web.xml dizini
Java web uygulamalarında olması gereken bir dosyadır. Sunucu uygulamalarınızı çalıştırdığında bu kısımdaki adımları çalıştırır.
Bu dosya içeriğinde genel olarak aşağıdaki aşamalar mevcuttur.
**Servletler
**Welcome page (Açılacak ilk sayfayı belirtiyorsunuz)
**Context içerik(Sunucu ile başlaması gereken java nesnelerinin konfigürasyonu yapar.)
**Filter içerik(Servletlerin filtrelemesini sağlar.Örneğin login olmamış kullanıcının belli dosyalara erişmesine izin verilmesi)
**Listener içerik (Sayfanızı dinler.Örneğin oturum düşmüşse başka sayfa yönlendir.)
**Servletlerin destekleği uzantılar.(Servlet Mapping Ör: .html,.jsp vb.)
**Servletlerin destekleyebileceği uzantılar.(Mime Mapping Örneğin uzantısı doc dosyaları indirmek)
Java tabanlı Web uygulamaların içeriği genel olarak bu şekildedir. İyi günler dilerim.