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();
}
}
}
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.
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
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 |
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.
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.
Kaydol:
Kayıtlar (Atom)