10 Kasım 2011 Perşembe

java.lang.IllegalArgumentException


java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Unknown Source)
at javax.swing.JLayeredPane.addImpl(Unknown Source)
at javax.swing.JDesktopPane.addImpl(Unknown Source)

DesktopPane ve InternalFrame içeren classlarımda

Frame oluştuğunda tekrar oluşturulmaması için


if (getForm().isShowing()) {
getForm().toFront();
System.out.println("frame is already opened...");
} else {
System.out.println("open singleton frame");
Program.desktopPane.remove(getForm());
                                Program.desktopPane.add(getForm());

romeve yapılarak tekrar eklenmesi gerekir. Yoksa hata oluşmakta.



3 Kasım 2011 Perşembe

Jasperreport ile raporlama örneği

MySQL ile raporlama java uygulaması.

Bu örnek için projeye aşağıdaki jarlar eklenmelidir.
https://rapidshare.com/files/826483124/jasperLib.rar

Raporun düzenlemesi i-report ile yapılmıştır.
Baglan, Frame isminde iki class ile oluşmakta.

Projenin dosyası aşağıdaki linkde yer almakta.
https://rapidshare.com/files/1538633838/Raporlama.rar?bin=1

//Baglan.java

import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;

public class Baglan {
private  Connection con = null;

public  Connection getCon() throws  InstantiationException, IllegalAccessException {
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "Sürücü Bulunamadı!","Hata",JOptionPane.ERROR_MESSAGE);
System.err.print("Sürücü bulunamadi");
System.err.println(e.getMessage());
}
try{
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbismi","root","123456");1
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Bağlantı Kurulamadı!","Hata",JOptionPane.ERROR_MESSAGE);
e.getMessage();
System.exit(0);
}
return (con);
}
}

//Frame.java


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;

public class Frame extends JFrame {

public static Connection con=null;
public static ResultSet rs;
public static Baglan baglan=new Baglan();

public Frame() {
getContentPane().setLayout(null);

JButton btnNewButton = new JButton("Raporla");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String reportFile = "c:\\reports\\report1.jrxml";

       runReport(reportFile);
}
});
btnNewButton.setBounds(10, 50, 91, 23);
getContentPane().add(btnNewButton);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Frame frm = new Frame();
frm.setBounds(100, 100, 200, 200);
frm.setVisible(true);
}

public static void runReport(String reportFile) {
   try {
       JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
       JasperReport jasperReport = JasperCompileManager
               .compileReport(jasperDesign);
     
       rs = null;
con=baglan.getCon();
 Statement stmt=con.createStatement();
 String sql="SELECT T_ADI FROM TABLE";

 rs=stmt.executeQuery(sql);
     
       JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(rs);

       String lsQuery="asd";

       Map parameters = new HashMap();
       parameters.put("strQry", lsQuery);
     
       JasperPrint jasperPrint = JasperFillManager.fillReport(
               jasperReport, parameters, resultSetDataSource);
       JasperViewer.viewReport(jasperPrint, false);
   } catch (Exception e) {
    JOptionPane.showMessageDialog(null, "Rapor Bulunamadı...");
       e.printStackTrace();
   }
}
}

Jasperreport Raporlamada Hata


java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap

java.lang.NoClassDefFoundError: org/apache/commons/beanutils/MethodUtils

Bu hatalardan birini alıyorsanız. Link de bulunan jasper ile ilgili jarları kullanmanız gerekmekte.

https://rapidshare.com/files/826483124/jasperLib.rar

JFrame Başlık - Title Bar gizleme

JFrame Başlık - Title Bar gizleme


frame.setUndecorated(true);

Oracle Export İmport

Export : Database in dışarı aktarılması işlemidir.

Bir bat dosyası oluşturarak;
exp usename/password@database_name file=backup.dmp log=backup.log statistics=none 
Pause;
yazdığımızda database belirlenen kriterlere göre dışarı dump dosyasına alacaktır

İstisnalar:

Sadece belirli kullanıcıyı almak için; OWNER=ADMIN .
Tüm kullanıcıları almak için;FULL=Y 
Tabloları verilerine ihtiyacınız yok ise boş halini almak için; ROWS=NONE
Bazı durumlarda sadece belirli tabloları almak için ; TABLES= TABLE1,TABLE2 yazarak


İmport : Database in içe aktarılması işlemidir.


imp usename/password@database_name file=backup.dmp log=backup.log fromuser=auser touser=buser
Pause;


Yine TABLES kriteri import da kullanılabilir.

Tamamı alınmış bir database dump ın içinde sadece belirli tabloları import etmek için

Oracle Replace Kullanımı


İlgili kolonda bazı veriler düzenlenmek istendiğinde;

Aşağıdaki örnek; KOD alnında " . " geçenleri "" temizleyecek ve update edecektir.

UPDATE ISLEM
SET  KOD= REPLACE (KOD,'.','')
Şekil1 : Mevcut Hali

Şekil2: Update edilmiş Hali



Oracle daki tablo ve kolonları listelemek


Oracle da user_tab_ ile başlayan tablolar

kullanıcıya ait tabloları (owner), tablolara ait kolonları enson değişiklik bilgilerini içerir.

select  table_name, column_name, data_type, data_length, column_id
from user_tab_columns
where table_name like '%'
order by table_name,column_name;

Bu sql ile aşağıdaki sonuç alınacaktır.


2 Kasım 2011 Çarşamba

Bir tabloda yapılan işlemi (insert, update, delete) başka bir tabloda yapmak


Bir tabloya kayıt eklendiğinde güncellendiğinde veya silindiğinde başka tabloda da aynı işlemleri yaptırmak.


Bu işlemi kullanılan tablonuza bir trigger ekleyerek kolaylıkla kontrol edebilirsiniz.
İki tablodaki veriler birebir tutmuyorsa sadece temel alanları ekleyebilirsiniz.


Örnek triggerlar;


Delete için:  TABLE_A Işlem yapılan tablo, TABLE_B değişiklik yaptırmak istediğimiz tablo;



CREATE OR REPLACE TRIGGER "TRI_TABLE_B_DEL"
AFTER DELETE
ON TABLE_A
FOR EACH ROW
BEGIN
  DELETE FROM TABLE_B@DB where T_NO = :old.T_OKULNO;
END TRI_TABLE_B_DEL;

Insert için;


CREATE OR REPLACE TRIGGER "TRI_TABLE_B_INS"
    AFTER
INSERT ON TABLE_A FOR EACH ROW
BEGIN
  INSERT INTO TABLE_B@DB
    (T_NO,
     T_ADI,
     T_CINSIYET
)

VALUES
    (:NEW.T_OKULNO,
    :NEW.T_ADI,

case when(:NEW.T_CINSIYET = 'B') then 'Belirsiz' else case
     when(:NEW.T_CINSIYET= 'E') then 'Erkek' else case
     when(:NEW.T_CINSIYET= 'K') then 'Kadın' else null end end end,

)
END TRI_TABLE_B_INS;


Update İçin;



CREATE OR REPLACE TRIGGER "TRI_TABLE_B_UPD"
AFTER UPDATE
ON TABLE_A
FOR EACH ROW
BEGIN
  UPDATE ENLIL.TABLE_B@EJDENLIL
     SET T_NO  = :NEW.T_OKULNO,
         T_ADI         = :NEW.T_ADI
 WHERE T_NO = :old.T_OKUL;





Mys sql de tabloları foreign key ile bağlamak.


Bir tanımlama tablonuz bulunmakta. Buradaki tanımlamalar hareket veya detay tablolarında tutulmakda.
Ancak bazı bilinçli veya bilinçsiz müdahalelerde tanımlama tablosunda değişiklik yapıldığında hareket veya detay tablosunda kontrol olmadığı için veri tutarsızlıkları oluşmaktadır.

İşte bu yüzden ilgili tabloyu refarans tablosu ile bağladığımızda; isteğe göre;

Şekil1 : Hareket, Detay Tablosu. Örnel olarak İlçe tablosu



Şekil 2: Referans Tablosu. Örnek olarak İl tablosu
Cascade: Tanımlama tablosundaki veri silinip veya güncellendiğinde hareket veya detay tablosundaki veriyi günceller veya siler.

Set Null : Tanımlama tablosundaki veri silinip veya güncellendiğinde hareket veya detay tablosundaki boş olarak günceller.

Restrict : Referans tablodaki veri silinirse veya güncellenmeye çalışıldığında eğer kullanılmış veri ise izin vermemesini sağlar.


Java da erişim kontrolleri

public : hem clas(sınıf) içinden hemde dışarıdan erişilebilir.

private: sadece o class(sınıf) içersinde kullanılabilir.

protected: hem class(sınıf) içerisinden hemde o class'dan kalıtım yoluyla türetilmiş sınıflardan ulaşılabilir.