Menu

16 Haziran 2010 Çarşamba

ResultSet`i List`e cevirme

List al = new ArrayList();
ResultSet rs = stmt.executeQuery("SELECT userid, username FROM USER");
while (rs.next()) {
   int i = rs.getInt("userid");
  String str = rs.getString("username");
  User user = new User(i, str);
  al.add(user);
}

Application Express (APEX) Nedir, APEX`in Ozellikleri ve kullanim alanlari

  • Application Express (APEX), eski adı HTML-DB olan ve Oracle veritabanı üzerinde çalışan hızlı uygulama geliştirme aracıdır
  • APEX, web tabanlı uygulama geliştirmek için tasarlanmış, web tabanlı çalışan bir üründür
  • APEX uygulamalarını kullanabilmek için istemci (client) tarafına kurulması gereken herhangi bir program yoktur
  • APEX, Oracle tarafından sürekli geliştirilen ve yenilenen bir platformdur
APEX Özellikleri   
  • APEX’in çalışabilmesi için herhangi bir Application Server kurulumuna ihtiyaç yoktur
  • SQL, PL/SQL, HTML, CSS gibi bilinen teknolojiler aynı framework içerisinde birleştirilmiştir
  • APEX uygulamalarıyla ilgili tüm bilgiler veritabanında tutulur, başka bir kaynak kod üretimi söz konusu değildir
  • Application Builder - Dinamik uygulama geliştirme aracı 
  • SQL Workshop - Veritabanı yapılarını inceleme, SQL sorguları oluşturma aracı 
  • Utilities - Yardımcı uygulamalar 
  • Raporlar ( SQL sorguları , SQL dönen fonksiyonlar )        
  • Bilgi Giriş Formları 
  1. Tablo, view yada prosedür üzerine formlar
  2. Çoklu güncelleme formları 
  3. Master-detail formlar 
  4. Web service formları 
  5. Pop up formlar 
  • Grafikler 
  • Takvimler 
  • Güvenlik
  1. LDAP bağlantısı 
  2. Single sign-on
  3. Veritabanı kullanıcı 
  4. Apex kullanıcısı 
  5. Her objeye güvenlik şeması atayabilme
  • Navigasyon - Tab, listeler, ağaç görünümü, breadcrumbs
  • Oracle 9.2.0.3 verisyonundan itibaren tüm Oracle veritabanı versiyonları tarafından desteklenir
  • Ücretsiz bir versiyon olan OracleXE veritabanı üzerinde tam uyumlulukla çalışır

APEX Kullanım Alanları               
  •  Veritabanı merkezli uygalamalarınız varsa
  • Genel olarak SQL veya PL/SQL bilginiz varsa
  • Çok derin programlama bilgisine ihtiyaç duymadan belirli özelliklerde web uygulaması yapmak istiyorsanız, 
  • MS Access veya MS Excel’de yaptığınız işleri merkezi bir uygulamaya taşımak istiyorsanız, 
  • Dünya çapında yaygın kullanım alanına sahiptir. Büyük ölçekte projelerin gerçekleştirildiği sektörler
  1. Kamu - Otomotiv - Telekom - Bilimsel Arastirma    

Oracle Application Express’e Dışarıdan Ulaşma(Remote Access)

Bu işlemi yapmadan önce yapılacaklar:
-Windows Servislerinden OracleXETNSListener ı kapatıyoruz.
-Çalışan herhangi bir tarayıcı ekranı var ise onları da kapatıyoruz(ki neden çıktığını anlamadığınız bir sorunla karşılaşmayın. Bazen işlem düzgün çalışsa da tarayıcı kapatılıp açılmadığından sayfaya erişilemiyor hatası çıkıyor.)

Oracle Application Express 3.0.1(önceki versiyonlarda da geçerli) de dışarıdan ulaşmak için başlat->çalıştır’dan cmd yazıp command prompt a giriyoruz. Command prompta:
sqlplus system/sifreniz
yazıp sqlplus’a system olarak bağlanıyoruz. Buradan sonra aşağıdaki komutu çalıştırıyoruz:
exec dbms_xdb.setListenerLocalAccess(l_access => FALSE);

Servislerden OracleXETNSListener ı açıyoruz.

Bundan sonra hangi ip yi aldıysak örneğin http://192.168.2.1:8080/apex yazıp application express’e bağlanıyoruz. Eğer bilgisayar adı tanımlanmışsa aynı şekilde ağ içerisinde örneğin http://ertugrul:8080/apex yazıp da bağlanabilirsiniz.

Eğer uzaktan bağlantı erişimini engellemek istiyorsak:
exec dbms_xdb.setListenerLocalAccess(l_access => TRUE);
yazarak tekrar sadece localhost tan erişime açık hale getirebiliyoruz.

Hepsi bu kadar.

12 Haziran 2010 Cumartesi

Report Parser

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReportParser {

    private Properties fileTable;
    private String reportDirectory;

    public ReportParser(File file, String reportDirectory) throws Exception {

        this.reportDirectory = reportDirectory;
        if (this.reportDirectory == null) {
            this.reportDirectory = file.getParent();
        }
        fileTable = new Properties();
        parse(file);

        fileTable.store(new FileOutputStream(this.reportDirectory + file.separator + "main.xml"), "Report table");
    }

    private String convertToFullName(String directory, String fileName) {
        if (!fileName.contains(File.separator)) {
            fileName = directory + File.separator + fileName;
        }
        return fileName;
    }

    public void parse() {
    }

    public void parse(File file) throws Exception {

        if (fileTable.getProperty(file.getName()) != null) {
            return;
        }

        fileTable.setProperty(file.getName(), UUID.randomUUID().toString().replaceAll("-", ""));

        Document doc = getDocument(file);

        NodeList imgList = doc.getElementsByTagName("imageExpression");

        for (int i = 0; i < imgList.getLength(); i++) {
            Node imgNode = imgList.item(i);
            String fileName = imgNode.getTextContent().replaceAll("\"", "");
            fileName = convertToFullName(file.getParent(), fileName);
            String value = fileTable.getProperty(fileName);
            if (value == null) {
                value = UUID.randomUUID().toString().replaceAll("-", "");
                fileTable.setProperty(fileName, value);
                imgNode.getFirstChild().setNodeValue(value);
                writeImage(fileName, convertToFullName(reportDirectory, value));
            }
        }

        NodeList subReportList = doc.getElementsByTagName("subreportExpression");

        for (int i = 0; i < subReportList.getLength(); i++) {
            Node subReportNode = subReportList.item(i);
            String fileName = subReportNode.getFirstChild().getNodeValue().replaceAll("\"", "").replaceAll(".jasper", ".jrxml");
            fileName = convertToFullName(file.getParent(), fileName);
            String value = fileTable.getProperty(fileName);
            if (value == null) {
                parse(new File(fileName));
                subReportNode.getFirstChild().setNodeValue(value);
            }
        }
        writeDocument(doc, convertToFullName(this.reportDirectory, fileTable.getProperty(file.getName())));
    }

    public Properties getFileTable() {
        return fileTable;
    }

    public void setFileTable(Properties fileTable) {
        this.fileTable = fileTable;
    }

    public void writeDocument(Document document, String file) {
        try {
            XMLSerializer serializer = new XMLSerializer();
            serializer.setOutputCharStream(
                    new java.io.FileWriter(file));
            serializer.serialize(document);
        } catch (Throwable ex) {
            ex.printStackTrace();
        }
    }

    private Document getDocument(File xmlFile) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);
        doc.getDocumentElement().normalize();
        return doc;
    }

    private void writeImage(String fileName, String value) {
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(fileName);
            byte[] buf = new byte[fin.available()];
            fin.read(buf);
            fin.close();
            FileOutputStream fout = new FileOutputStream(value);
            fout.write(buf);
            fout.close();
        } catch (IOException ex) {
            Logger.getLogger(ReportParser.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

11 Haziran 2010 Cuma

Ireport uzerinde SubReport olusturma ve kullanma

Bu yazimizda Ireport uzerinde subreport kullanimini, bir rapor uzerine subreport`un nasil eklendigi uygulamali bi sekilde yapmaya calisacaz..

Ben NetBean uzerindeki daha onceden JavaDB (Derby) ile baglanti kurdugum source kullanacam..

Oncelikle bize gerekli olacak tablolari yaratma ile baslayalim, ve tablolar uzerindeki iliskileri belirtelim..

CREATE TABLE alumnos (            
                ID integer NOT NULL,               
                NOMBRE varchar(100) NOT NULL,         
                CLAVE varchar(100) NOT NULL,       
                PRIMARY KEY  (ID)                     
              )

Ikinci Tablomuz..

CREATE TABLE materias (            
                ID integer NOT NULL,               
                NOMBRE VARCHAR(100) NOT NULL,         
                PRIMARY KEY  (ID)                     
              )

 Tablolar arasinda iliskileri gosterdigimiz yardimci tablomuz


CREATE TABLE alumnos_materias (
    ALUMNO_ID integer NOT NULL, 
    MATERIA_ID integer NOT NULL, 
     PRIMARY KEY (ALUMNO_ID, MATERIA_ID),

    FOREIGN KEY (ALUMNO_ID) REFERENCES alumnos (ID),
    FOREIGN KEY (MATERIA_ID) REFERENCES materias (ID) 
)

Simdide, tablolarimiza veriler ekleyelim..


INSERT INTO alumnos VALUES (1, 'Alumno 1', '00001');
INSERT INTO alumnos VALUES (2, 'Alumno 2', '00002');
INSERT INTO alumnos VALUES (3, 'Alumno 3', '00003');
INSERT INTO alumnos VALUES (4, 'Alumno 4', '00004');
INSERT INTO alumnos VALUES (5, 'Alumno 5', '00005');
INSERT INTO alumnos VALUES (6, 'Alumno 6', '00006');
INSERT INTO alumnos VALUES (7, 'Alumno 7', '00007');
INSERT INTO alumnos VALUES (8, 'Alumno 8', '00008');
INSERT INTO alumnos VALUES (9, 'Alumno 9', '00009');
INSERT INTO alumnos VALUES (10, 'Alumno 10', '000010');


INSERT INTO materias VALUES (1, 'Matematicas');
INSERT INTO materias VALUES (2, 'Fisica');
INSERT INTO materias VALUES (3, 'Quimica');
INSERT INTO materias VALUES (4, 'Biologia');
INSERT INTO materias VALUES (5, 'Historia');
INSERT INTO materias VALUES (6, 'Geografia');


INSERT INTO alumnos_materias VALUES (1, 1);
INSERT INTO alumnos_materias VALUES (1, 3);
INSERT INTO alumnos_materias VALUES (1, 5);

INSERT INTO alumnos_materias VALUES (2, 1);
INSERT INTO alumnos_materias VALUES (2, 2);
INSERT INTO alumnos_materias VALUES (2, 3);

INSERT INTO alumnos_materias VALUES (3, 2);
INSERT INTO alumnos_materias VALUES (3, 4);
INSERT INTO alumnos_materias VALUES (3, 6);

INSERT INTO alumnos_materias VALUES (4, 4);
INSERT INTO alumnos_materias VALUES (4, 5);
INSERT INTO alumnos_materias VALUES (4, 6);

INSERT INTO alumnos_materias VALUES (5, 1);
INSERT INTO alumnos_materias VALUES (5, 4);
INSERT INTO alumnos_materias VALUES (5, 5);

INSERT INTO alumnos_materias VALUES (6, 2);
INSERT INTO alumnos_materias VALUES (6, 5);
INSERT INTO alumnos_materias VALUES (6, 6);

INSERT INTO alumnos_materias VALUES (7, 1);
INSERT INTO alumnos_materias VALUES (7, 3);
INSERT INTO alumnos_materias VALUES (7, 5);

INSERT INTO alumnos_materias VALUES (8, 1);
INSERT INTO alumnos_materias VALUES (8, 2);
INSERT INTO alumnos_materias VALUES (8, 3);

INSERT INTO alumnos_materias VALUES (9, 2);
INSERT INTO alumnos_materias VALUES (9, 4);
INSERT INTO alumnos_materias VALUES (9, 6);

INSERT INTO alumnos_materias VALUES (10, 4);
INSERT INTO alumnos_materias VALUES (10, 5);
INSERT INTO alumnos_materias VALUES (10, 6);

Bir şeye karar vermeden önce 2 defa düşünün!

Bir şeyde çok iyi ol. O “şey” seni değerli kılacak

Özürlü sekiz çocuğu olan ve frengi hastası hamile bir kadına rastlasaydınız, ona kürtaj olmasını tavsiye eder miydiniz?

Yanıtladıktan sonra aşağıdaki soruları yanıtlayın.
Şimdi bir dünya lideri seçme zamanı ve sizin oyunuz da sonucu etkileyecek.
Işte üç aday hakkındaki gerçekler:
1. aday: Sahtekar siyasetçilerle işbirliği içinde ve falcılara danışıyor.
Iki metresi olmuş. Paket paket sigara ve günde 8 ile 10 bardak martini içiyor.
2. aday: İki kere işten atılmış, öğlene kadar uyur. Üniversitedeyken uyuşturucu kullanmış ve her gece 1 litre viski içiyor.
3. aday: Madalya almış bir savaş kahramanı, vejeteryan, sigara içmiyor.
Nadiren bira içer ve evlilik dışı hiçbir ilişkisi olmamış.
Tercihiniz bu adaylardan hangisi olurdu?
Önce karar verin, kopya çekmek yok, daha sonra aşağıdaki yanıta bakın lütfen!
1. aday: Franklin D. Roosevelt
2. aday: Winston Churchill
3. aday: Adolf Hitler
ve bu arada…
Kürtaj sorusuna eğer evet dediyseniz, Beethoven’i öldürdünüz!
JRXML file parsing ve Zip file olusturma

import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ReadXMLFile_bak {

    public static String directory;
    public static String fXmlFile;
    public static String ZipedFileName;

    public static void main(String argv[]) throws Exception {
        ReadXMLFile_bak mLFile = new ReadXMLFile_bak();
        mLFile.zippedJRXML();

    }

    public void zippedJRXML() throws Exception {
        NodeList nList = getDocument().getElementsByTagName("jasperReport");
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                List files = new ArrayList();
                files.add(fXmlFile);
                files.addAll(getSubReportList(nNode));
                files.addAll(getImageList(nNode));
                createZip(files);
            }
        }
    }

    private List getSubReportList(Node node) {
        Element eElement = (Element) node;
        List subReps = new ArrayList();
        for (String sb : getTagValue("subreportExpression", eElement)) {
            sb = sb.substring(1, sb.length() - 1);
            if (!sb.contains("\\")) {
                subReps.add(directory + sb);
                System.out.println("subReps : " + directory + sb);
            } else {
                subReps.add(sb);
            }
        }
        return subReps;
    }

    private List getImageList(Node node) {
        Element eElement = (Element) node;
        List images = new ArrayList();
        for (String sb : getTagValue("imageExpression", eElement)) {
            sb = sb.substring(1, sb.length() - 1);
            if (!sb.contains("\\")) {
                images.add(directory + sb);
            } else {
                images.add(sb);
            }
        }
        return images;
    }

    private List getTagValue(String sTag, Element eElement) {
        int size = eElement.getElementsByTagName(sTag).getLength();
        List list = new ArrayList();
        for (int i = 0; i < size; i++) {
            NodeList nlList = eElement.getElementsByTagName(sTag).item(i).getChildNodes();
            Node nValue = (Node) nlList.item(0);
            list.add(nValue.getNodeValue());
        }
        return list;
    }

    private void createZip(List files) throws Exception {
        FileOutputStream outputFile = new FileOutputStream(ZipedFileName);
        ZipOutputStream zipFile = new ZipOutputStream(outputFile);
        byte[] buffer = new byte[1024];
        for (int i = 0; i < files.size(); i++) {
            FileInputStream inFile = new FileInputStream(files.get(i));
            zipFile.putNextEntry(new ZipEntry(files.get(i)));
            int length;
            while ((length = inFile.read(buffer)) > 0) {
                zipFile.write(buffer, 0, length);
            }
            zipFile.closeEntry();
            inFile.close();

        }
        System.out.println(".....Created ZIP file Successfully.....");
        zipFile.close();
    }

    private Document getDocument() throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
        return doc;
    }
}

8 Haziran 2010 Salı

Object Kelimesinin Seçilmesi

Kelimeler hiç şüphesiz düşüncelerimizi, hayal dünyamızı, algılarımızı şekillendiriyor. Fikir dünyamız için yeni açılımlar getirmede kolaylaştırıcı bir rol de üstlenebiliyorlar, veya tam tersine düşüncelerimiz önünde zaman zaman engel de olabiliyorlar. Bilişim teknolojilerindeki yabancı terimlere bire bir sözlük karşılıkları bulunmasından pek memnun olmadığımı belirtmek istiyorum. Endişem bu sözlük karşılıklarının üzerinde çalıştığımız alanla ilgili kavram, olgu ve diğer yapıları tam manası ile aktarmada zayıf kalmalarıdır.

Aşağıda 2003 yılında Harezmi Yahoo grubunda yayımlanmış bir mesajdan bir bölüm var. Mesajın sahibi Naci Akkök. Halen Norveç Oslo Üniversitesi'nde öğretim görevlisi. Nesneye dayalı programlama ile ilgili kavramları mümkün olduğunca sağlıklı ve kayıpsız biçimde insanlar arasında paylaşabilmek için object teriminin nasıl tercih edildiği ile ilgili çok inginç bir örnek olduğunu düşünüyorum.

Ben Kristen Nygaard'un önce ögrencisi sayilirim. Simdi "Simula" müzesine kaldirilan bir kara (aslinda esil) tahtamiz vardi, onun önünde böyle seyleri günlerce tartisirdik. Nesne object gibi ama "material" olma özelligini ima ediyor. Object kelimesinin arkasinda yatan orijinal fikir "individual" ve "identifiable" olmasi idi, ama terimin bilincli bir sekilde "ting" olarak secilmemesinin ana nedeni kavramlari kapsamamasi idi. Bir de object'in "process" (sürec, sadece aktivite tanimi) kavramina kontrast olarak secildigini de hatirlamak gerekir. Kristen Nygaard'un Ole Johan Dahl (yani Simula ve OO kavramlarinin "formalisti") ile tartismalarindan su cümleyi cok iyi hatirliyorum: Bu "sey" hem fiziki hem kavramsal seyleri temsil edebilmeli. Kendisi sürec'e alternatif olmali ama bir süreci de temsil edebilmeli. Ingilizcedeki tanimimiz "a structural and behavioral representation of a conceptual or physical entity, identifiable as a separate individual entity".

Hatta "object" kelimesinin (ki Norveccesi de ayni, Objekt) seciminde bir bireye "odaklanma" (focus) yan anlami da önemli: Programlama (ki o zaman Simula ve OO sadece simulasyon programlamak icin düsünülüyordu) cevreyi kavramsallastirmak, modellemek ile baslar, ve bu modelde nelere odaklanacak, neler model disi birkilacak bu da cok önemli (denirdi). Dolayisiyla objekt'ler model üniteleri olarak da "object of attention", yani secilip üzerine odaklanan objectler olarak da düsünülürdü. Ayrica "object"in "subject"ten faki, yani kavramsal da olsa "dissal" bir seyin temsili oldugu da kelimenin seciminde rol oynadi. Tabii daha benim bildigim ve nbilmedigim 1000 cesit tartisma oldu bu konuda, ama sanirim tartismalarin tarzinda modelleme ünitesinin özellikleri yatiyordu hep. Bunlar felsefi (ve tarihi) tartismalar belki ama tartismalarin altinda dilin ne derece düsünmeye yardimci olabilecegi veya engelleyebilecegi hipotezi yatiyor (Sapir-Whorf thesis).

Nesne bu kavramlari temsil ediyormu (kognitif olarak, yani otomatik bunu mu algiliyor insanlar "nesne" kelimesini duyduklarinda)? Degilse, bu kavramlari toplayan ve "icgüdüsel" temsil eden Türkce kelime nedir? Object'in Türkce cevirsindeki tartismalara aranizda sahit olan varmi? Bilmek isterdim.

Naci Akkök 29.08.2003


Evet, sahiden biz yabancı terimlere Türkçe karşılıklar bulurken bu değerlendirmeleri yapıyor muyuz?