Menu

31 Mayıs 2011 Salı

Faydali linkler

http://pl-sql-tutorial.blogspot.com/

http://mnsinger.wordpress.com/category/oracle/

http://oracleonline.info/

26 Mayıs 2011 Perşembe

Oracle OBE

http://st-curriculum.oracle.com/obe/db/11g/r2/2day_dba/index.html

25 Mayıs 2011 Çarşamba

dbms_output.put_line kisa formasi

Ozelliklede PL/SQL`de console biseyler yazdirmak icin, DBMS_OUTPUT.PUT_LINE(); gibi uzun bi kod yazmamiz gerekiyor, ancak bu yolu yeni bir procedure yazarak asabiliriz.. Hemde cok basit bir sekilde...

CREATE OR REPLACE PROCEDURE yaz(
 cn_text IN VARCHAR2 )
 IS
BEGIN
    SYS.DBMS_OUTPUT.PUT_LINE(cn_text);
END yaz;

kullanimi : 

BEGIN
     yaz('Hello World');
END;


SQL: ALTER TABLE Statement

ALTER TABLE deyimi, tabloyu yeniden adlandirma, colon ekleme, silme, degistirmek icin kullanilir. Asagida, ALTER TABLE deyimi ile birlikte neler yapabiliriz onlari gorelim.

Temel olarak bir tablonun adini degistirmek:
ALTER TABLE table_name RENAME TO new_table_name;
Ornek :
ALTER TABLE students RENAME TO ogrenciler;

Tabloya kolon(lar) ekleme :
ALTER TABLE table_name  ADD column_name column-definition;
Ornek :
ALTER TABLE student  ADD email varchar2(50);

Kolonlar ekleme :

ALTER TABLE table_name
ADD ( column_1 column-definition,
column_2 column-definition,
...
column_n column_definition );

Ornek :

ALTER TABLE student
ADD ( first_name varchar2(50),
city varchar2(45) );


Kolon bilgilerini degistirme :
ALTER TABLE table_name  MODIFY column_name column_type;
Ornek :
ALTER TABLE students  MODIFY email varchar2(100) not null;

Kolon Silme :
ALTER TABLE table_name  DROP COLUMN column_name;

Ornek :
ALTER TABLE students  DROP email ;

Kolon Ismini degistirme :
ALTER TABLE table_name  RENAME COLUMN old_name to new_name;
 Ornek : 
 ALTER TABLE students  RENAME COLUMN email to mail_address;

Practice Exercise #1:
Asagidaki departments tablosunun ismini degistirin.
CREATE TABLE departments
( department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);


Solution:
ALTER TABLE departments
 RENAME TO depts;

Practice Exercise #2:
Asagidaki Employees tablosuna, ismini salary, datatype number(6) olan bir kolon ekleyin.
CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);


Solution:
            
ALTER TABLE employees ADD salary number(6);

Practice Exercise #3:
Asagidaki Customers tablosuna, contact_name isminde ve varchar2(50) tipinde ve last_contancted isminde ve tarih tipinde colonlar ekleyin.
CREATE TABLE customers
( customer_id number(10) not null,
customer_name varchar2(50) not null,
address varchar2(50),
city varchar2(50),
state varchar2(25),
zip_code varchar2(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);


Solution:
ALTER TABLE customers
ADD ( contact_name varchar2(50),
last_contacted date );

Practice Exercise #4:
Employees tablosunda employee_name kolonun datatipini, 75 yapiniz.
CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);


Solution:
ALTER TABLE employees
 MODIFY employee_name varchar2(75);

Practice Exercise #5:
change the customer_name column to NOT allow null values and change the state column to a varchar2(2) datatype.
CREATE TABLE customers
( customer_id number(10) not null,
customer_name varchar2(50),
address varchar2(50),
city varchar2(50),
state varchar2(25),
zip_code varchar2(10),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);


Solution:
ALTER TABLE customers
MODIFY ( customer_name varchar2(50) not null,
state varchar2(2) );

Practice Exercise #6:
Asagidaki tablodaki salary kolonunu siliniz.
CREATE TABLE employees
( employee_number number(10) not null,
employee_name varchar2(50) not null,
department_id number(10),
salary number(6),
CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);


Solution:
ALTER TABLE employees  DROP COLUMN salary;

Practice Exercise #7:
Asagiadki tablodaki department_name kolonunun ismini, dept_name ile degistirin.
CREATE TABLE departments
( department_id number(10) not null,
department_name varchar2(50) not null,
CONSTRAINT departments_pk PRIMARY KEY (department_id)
);


Solution:
ALTER TABLE departments
 RENAME COLUMN department_name to dept_name;

16 Mayıs 2011 Pazartesi

jsf 2.0 ile gelen yenikler

Merhaba, bu makalemizde jsf 2.0 ile gelen yeniklerden ve Jsf 1.2 ile farklarindan, jsf 1.2 ile uyguladigimiz kodlari jsf 2.0 ile nasil
yaptigimizdan bahsetmeye calisacagim. Oncelikle jsf 2.0`in bize cok buyuk kolayliklar sagladigini belirtmek isterim, mesala artik applicatin.xml
dedigimiz diger bi adiyla faces-config.xml dosyasini jsf 2.0 ile kullanmamiza gerek kalmiyor, herseyi annotation`lar yardimi ile
kolaylikla yapiyoruz, ve bize xml ayar dosyalari ile ugrasmak degil, rahat rahat kod olusturmak kaliyor. Ilk karsilastirmamizdan baslayalim isterseniz.

Diyelim ki, birtane Backing Bean`imin olsun.

jsf 1.2 ile asagidaki sekilde kullaniyorduk.

UserBean.java
public class UserBean{

 private String name;

 getter / setter;
}


faces-config.xml


        userBean
        net.aslan.UserBean
        request


bu sekilde kullaniyorduk, ama jsf 2.0 ile yapacagimiz sey cok basit, tek yapmamiz gereken classimiz uzerinde annotation olarak gostermek :)

Jsf 2.0 ile

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="userBean")
@RequestScoped
public class UserBean{

 @ManagedProperty("Ertugrul")
 private String name;

 getter / setter;
}


hepsi bukadar. Artik UserBean backing beanimiz hazir. normal bi sekilde kullanabiliriz. Ve tabiki istenildi
durumda projede faces-config.xml dosyasi kullanilabilinir.



Bu sekilde annotationlar yardimi ile converter`larimizi, validator`larimizi olusturabiliriz, bunlarida karsilastiracak olursak

Jsf 1.2 ile kullanimi


        DateConverter
        net.aslan.jsf.converters.DateConverter


   
        emailValidator
        net.aslan.jsf.validators.EmailValidator
   


bu sekilde faces-config.xml icinde olusturuyorduk ve, kullanirken


       


ve validatorlarida ayni sekilde kullaniyorduk. simdi jsf 2.0 ile ne kadar kolay yapilidigina bakalim.

import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


@FacesConverter(value = "dateConverter")
public class DateConverter implements Converter {

}

bu sekilde classimizi converter olarak gosteriyoruz ve,



yapmamiz gereken bukadar. validatorlarimizida ayni sekilde kullaniyoruz

import javax.faces.validator.FacesValidator;

@FacesValidator(value = "emailValidator")
public class EmailValidator implements Validator {

}

bu sekilde,

Kendi olusturdugumuz custom componentlerimizide, diger http://www.jtpd.org/wiki/257311 makalemizde oldugu gibi yine annotation ile belirtiyoruz ve kullanabiliyoruz.

Gordugunuz gibi faces-config.xml ayar dosyasina hic bi sekilde ihtiyacimiz kalmadi..

Peki jsf 1.2 ile jsf 2.0 farklar bu kadar, elbetteki hayir. Simdi tek tek inceleyelim.
Oncelikle benimde daha once cok sorun yasadigim, url`nin diger sayfaya gittiginde degismeden kalmasi, diger sayfaya giderken url`nin
degismesi icin yapiyorduk, bu defada diger sayfaya giderken veriyi koruyamiyorduk.
Jsf 2.0 ile birlikte cok guzel bi cozum yolunu bulunmus ve benimde cok hosuma gitti :)

kullanimi asagidaki sekilde,

 
       
            edit
            /edit.xhtml
           
       

   

 tek yapmamiz gereken bu satiri kullanmamiz, bu sekilde kullaninca artik url`i istedigimizde sekilde
 degistirebiliyoruz ve en guzelide verileri kaybetmiyoruz :).
 Bu kismi ayrintili bi sekilde incelemek icin, asagidaki linkden faydalanabilirsiniz.

 
http://blogs.sun.com/enterprisetechtips/entry/post_redirect_get_and_jsf

 Ve bu ozelliklerden daha dogrusunu soylemek gerekirse, J2EE 6 ile gelen yeniklerden ve JSP page`inin yerine facelets`lar gibi cok hizli calisan ve cok cok kullanisli olan bi teknolojilenin J2ee specification`a eklemesi.


 facelets`larin bize ne gibi yararlar saglandigi baska bir makalede genis
 ve uygulamali bir sekilde gorecez. burada facelets`lar ile gelen template ozelliginden biraz bahsetmek istiyorum. Uygulamamiz icin sablaon olusturmak ve bunu jsp`de oldugu gibi her sayfada tekrar tekrar kullanmak gibi cok buyuk bi zahmetten kurtariyor bizi, butun bunlari diger bi makelede uyuglamali
 bi sekilde gorecegiz. faceletsler ile jsf 2.0 asagidaki gibi kullaniyoruz.

 template.xhtml sayfamiz.

  http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:ui="
http://java.sun.com/jsf/facelets"
      xmlns:h="
http://java.sun.com/jsf/html">
 
   
    Facelets - Template Example
 

 

 
   


      Howto Samples
   


   
     
        Welcome
     

 


 ve bu template`i

 
http://www.w3.org/1999/xhtml"
      xmlns:ui="
http://java.sun.com/jsf/facelets"
      xmlns:h="
http://java.sun.com/jsf/html"
      xmlns:f="
http://java.sun.com/jsf/core">
template="/template.xhtml">
 
    Sayfa ust Kismi
 
 
   


#{userBean.name}

 


bu sekilde cok cok rahat bi sekilde kullaniyoruz. dedigim gibi diger makalede cok genis bi sekilde kullanacaz.
Burada dikkat ettiyseniz,

bu sekilde bi satirimiz var, burada

Diger bi yenilikden bahsedecek olursak, jsf 1.2`de metodlarin parametre degerlerini kullanamiyorduk, yani parametre alan bi metodu cagrip parametre veremiyorduk. Jsf 2.0 ile parametre alan metodlara parametre gonderip kullanabiliyoruz, hemen basit ve bizim icin cok faydali olacak bi ornek uzeriden gosterirsek.

Mesala list.xhtml sayfamizda, datatable ile listenen satirlarinin birinin uzerine tikladigimizda detay sayfasinda verinin gosterilmesi

jsf 1.2 ile bunu,

HtlmDataTable`i kullanarak, getRowData metodunu cagrip secilen satirdaki nesneyim bizim Object nesnemiz`e atiyorduk, yani


public class UserBean{
User selectedUser;
HtmlDatatable dataTable;


public HtmlDatatable getDataTable(){
 return dataTable;
}

public void setDataTable(HtmlDatatable dataTable){
 this.dataTable = dataTable;
}


public String detail(){
 selectedUser = dataTable.getRowData();
 return "detail";
}


binding="#{userBean.dataTable}" value="#{userBean.list}" var="user">







.......
......

genel itibariyle busekilde kullaniyorduk, yani HtmlDatatable componentinin ozellikleri kullanip, datatable`imizi buna binding yaparak yapmaya calisiyorduk. ve birde bunun faces-config.xml ayar dosyalari falani var :)..

Peki ayni ornegi jsf 2.0 nasil yapabiliriz,

@ManagedBean
public class UserBean{

User selectedUser;

public String detail(User user){
 selectedUser = user;
 return "detail";
}









="#{userBean.detail(user)}" value="user.name"/>


......
.....


gordugunuz gibi bu kadar basit, yani datatable`dan gelen user nesnesini, commandLinki`imizin action`unda parametre olarak giriyoruz ve bunu detail metodumuza parametre olarak gondererek ve esitliyoruz :).
Bu uygulamaya asagidaki sekilde... Netbeans`de kullanimi..


DataBean.java

package net.aslan.jsf.controller;

import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import net.aslan.beans.Person;
import net.aslan.beans.PersonRemote;

/**
 *
 */
@ManagedBean
@SessionScoped
public class DataBean implements Serializable {


    @EJB
    private PersonRemote pr;
    private Person selectedPerson;


    public List getPersons() {
        return pr.findAll();
    }


    public String detail(Person person) {
        selectedPerson = person;
        return "detail?faces-redirect=true&includeViewParams=true";
        // bu sekilde kullaninca veriyi kabetmeden url`i oldugu sayfada gosterebiliriz.
        // istenildigi durumda faces-config.xml`de navigation`lardada kullanilabilir
.
    }


    public Person getSelectedPerson() {
        return selectedPerson;
    }


    public void setSelectedPerson(Person selectedPerson) {
        this.selectedPerson = selectedPerson;
    }

}


Person.java

package net.aslan.beans;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author ertugrul
 */
@Entity
public class Person implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    private String lastname;
    private String email;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Person)) {
            return false;
        }
        Person other = (Person) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "accr.beans.Person[id=" + id + "]";
    }
}



PersonRemote.java

package net.aslan.beans;
import java.util.List;
/**
 *
 * @author ertugrul
 */
public interface PersonRemote {

    public void create(Person Person);
    public void edit(Person Person);
    public List findAll();

}

PersonEJB.java

package net.aslan.beans;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
 *
 * @author ertugrul
 */
@Stateless
public class PersonEJB implements PersonRemote {

    @PersistenceContext
    EntityManager em;

    public void create(Person Person) {
        em.persist(Person);
    }

    public void edit(Person Person) {
        em.merge(Person);
    }

    public List findAll() {
        return em.createQuery("select object(o) from Person as o").getResultList();
    }
}



index.xhtml


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

   
       
       
                                     styleClass="datatable" cellpadding="2"
                         cellspacing="0" rowClasses="row-odd, row-even">
               
                   
                       
                   

                   
               

               
                   
                       
                   

                   
               

           

       

   



detail.xhtml


http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml"
      xmlns:h="
http://java.sun.com/jsf/html">

   

Detail Person


   
       
           
           
           
           
           
           
       

       
   



datatablestyle.css

.datatable{
    border: 1px solid olive;
}
.datatable thead th{
    background-color: #dfdfdf;
    border-bottom: 1px solid olive;
    padding: 4px;
}
.row-odd td{
    padding: 4px;
    background-color: #ddffcc;
}
.row-even td{
    padding: 4px;
    background-color: #cceebb;
}

dataTable tfoot {
    background-color: #999;
}