Tổng quan về report và các triển khai report trong Java - How to use report in Java

Discussion in 'Bài viết hướng dẫn JSE' started by tranhuyvc, 17/5/11.

  1. tranhuyvc

    tranhuyvc Administrator Staff Member

    Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Chào các bạn, khi nói đến report trong Java đa phần các bạn đều cảm thấy nó rất khó và phức tạp, nhưng đó là lúc trước, hoạt chưa có tài liệu chính thức nào hỗ trợ report trong Java. Nay Huy thay mặt BQT nghiên cứu và đưa ra chuyên đề report trong Java, hướng dẫn sử dụng và phân phối trong ứng dụng Java desktop. Nào chúng ta cùng bắt đầu nha !

    Tổng quan về report
    -------------------------------------------------------------

    Report là gì ?
    Report là một dạng báo cáo trong các ngôn ngữ lập trình, hỗ trợ tạo, xuất dữ liệu, biểu đồ ra dạng report có thể in và lưu lại với các dang tài liệu phổ biến như pdf, docs, txt… một cách trực tiếp
    Report trong Java .

    Có nhiểu chương trình hỗ trợ report trong java, xong phổ biến và để dùng nhất phải nói đến ireport của JasperReports

    ireport là gì ?
    ireport là một chương trình hỗ trợ người dung và người lập trình sử dụng thư viện của Jaspereport để thiết kế trong mô trường trực quan bằng GUI
    Vì vậy việc tạo report trở nên để dàng hơn. Ireport hỗ trợ tất cả các chức năng quan trọng của một report thông thường nhưng trong thời gian ngắn. Thực chất thư viện của Jasperreport là dạng XMl sử dụng rất phức tạp, nhưng thông qua GUI chúng ta có thể tạo ra nó bằng các thành phần, thuộc tính và đồng thời chương trình sẽ sinh ra code dạng XML để thực thi

    Một số đặc tính chính của ireport
    Hỗ trợ 98% các thành phần cảu JasperReport
    Mô trường thiết kế trực quan bằng WYSIWYG
    Hỗ trợ Unicode và các kí tự không phải latin như tiếng trung quốc, tiếng hàn
    Hỗ trợ JDBC
    Hỗ trợ tất cả các loại của JRDataSource
    Hỗ trợ report con
    ….

    Hướng dẫn tạo report
    -----------------------------------------

    Những chương trình cần chuẩn bị
    Tải chương trình tạo report : IReport 4.0.2 của JasperReports tải tại đây : http://www.mediafire.com/?s22k771ji35af75
    Thư viên kết nối sql server 2005 để cấu hình trong Ireport tải tại đây : http://www.mediafire.com/?y7cu9jeu20u62sc


    Cấu hình kết nối cho chương trình
    (ở đây mình hướng dẫn đối với sql server 2005, các CSDL khác làm tương tự)
    Sau khi tải chương trình về, các bạn tiến hành cài đặt một cách bình thường, sau khi cái đặt xong, mở chương trình lên, cửa sổ chính của chương trình như sau :
    [​IMG]
    Giờ cần cấu hính classpath cho chuơng trình, add gói jdbcsql.jar vào chương trình : các bạn chọn Tools/ Options/ Ireport/ Classpath/ Add Jar/ chọn file jar kết nối của sql server 2005 (tải về ở trên). chọn Ok
    [​IMG]
    Tạo cấu hình kết nối chung cho chương trình :
    Click vào biểu tương hình CSDL ở cửa số chính của chương trình [​IMG]
    [​IMG]
    Chọn kiểu kết nối, ở đây chúng ta chọn Database JDBC connection, chọn Next
    [​IMG]
    Cửa số cấu hình kết nối, chúng ta tiến hành cấu hình như sau :
    Name : tên kết nối
    JDBC Driver : MS SQLServer (2005) (com.microsoft.sqlserver.jdbc.SQLServerDriver)
    JDBC URL : jdbc:sqlserver://localhost:1433;databaseName=<ten CSDL>
    Username : tên đăng nhập trong sql server
    Password : mật khẩu trong sql server
    Sau đó các bạn chọn Test để kiểm tra kết nối, nếu thành công thì chọn Save
    Bây giờ trên thanh công cụ của các bạn đã xuất hiện cấu hình bạn vừa tạo, sau này tạo các report chỉ cần chọn tên cấu hình là được
    [​IMG]

    Tạo report bằng Ireport
    Xong các bước cấu hình, chúng ta thử tạo một report mẫu bằng chương trình ireport nào!
    Trong bước cấu hình kết nối trên các bạn đã xác định được CSDL của mình, giờ bạn tạo một bảng trong CSDL đó và thực hiện theo các bước sau
    Ở đây mình tạo ra bảng DANHSACHSINHVIEN với cấu trúc sau
    [​IMG]
    Và thêm CSDL mẫu sau :
    [​IMG]
    Chọn File/ New
    Chọn mẫu theme tương ứng, nếu các bạn chưa quên thì nên chọn các mẫu thiết kết câu trúc sẳn không nên chọn các mẫu blank
    [​IMG]
    Ở đây mình chọn mẫu Cherry và chọn tiếp tục --> Launch report wizard
    [​IMG]
    Đặt tên và chọn vị trí cần lưu --> Next
    [​IMG]
    Chọn cấu hình CSDL đã tạo ở trên, và gõ câu lêng truy vấn SQL vào --> Next
    [​IMG]
    Chọn những trường cần đưa vào report --> Next
    [​IMG]
    Nếu muốn group lại theo trường nào đó thì chọn group ở cửa sổ trên --> Next
    [​IMG]
    Chọn finish để qua cửa sổ thiết kế của ireport
    [​IMG]
    Bạn sẽ nhận được cửa sổ thiết kế ở trên, chúng ta có thể thay đổi nội dung của các text một các bình thường
    Giờ chỉnh thuộc tính của report này là dành cho java bằng cách chọn vào toàn document chon thuôc tính Language : Java
    [​IMG]
    Xong giờ chúng ta có thể chọn qua thẻ Preview để xem demo nào
    [​IMG]
    Ở cửa số preview các bạn có thể save lại ở bất cứ định dạng nào từ pdf , html, đến word...
    Giờ chọn File/ Save as và lưu file .jrxml vào thư mục src của project java của bạn, để chúng ta thực hiện gọi report trong chương trình java sẽ được giới thiệu ở dưới. vậy là đã tạo được file report ! >:D<

    Gọi ireport trong ứng dụng Java Desktop
    Tạo ứng dụng Java thông thường, gọi report bằng đoạn code sau :
    PHP:
         try {
                
    String reportName "<duong dan file jaspaer vua tao, phai de trong thu muc SRC cua project>.jasper";
                
    HashMap map = new HashMap();
                
    InputStream is this.getClass().getClassLoader().getResourceAsStream(reportName);
                
    JasperPrint jasperPrint JasperFillManager.fillReport(ismapConnect.Con());
                
    //     JasperExportManager.exportReportToHtmlFile(jasperPrint, "huy.html");

                
    JasperViewer jv = new JasperViewer(jasperPrintfalse);
                
    jv.setVisible(true);
            } catch (
    Exception ex) {
                
    System.out.println(ex.getMessage());
            }
    Với đoạn code trên ta sẽ được kết quả y chang khi xem preview trong chương trình Ireport.

    Lưu ý
    Connect.Con() : là hàm kết nối CSDL của bạn, đến nối đúng với tham khảo tạo kết nối trong chuong trình Ireport, mình có hàm demo sau
    PHP:
            public static Connection Con() {
            
    // can add Library: sqljdbc.jar
            
    String url "jdbc:sqlserver://localhost:1433;database=<dataname>";
            
    String username "sa";
            
    String password "sa";
            
    Connection conn null;
            try{
                Class.
    forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                
    conn java.sql.DriverManager.getConnection(url,username,password);
             
    //   if(conn!=null) System.out.println("Connection Successful!");
            
    }catch(Exception e){
                
    JOptionPane.showMessageDialog(null"Can not connect to database !","Database Eror",JOptionPane.ERROR_MESSAGE);
            }
            return 
    conn;
        }
    Ngoài ra chúng ta cấn add nhiều gối lib thiếu vào, ở đây mình đã tập hợp, các bạn tải về và tất cả lib vào là được
    Thư viện dành cho việc triệu gọi report trong Java tải tại đây : http://www.mediafire.com/?usf4ww51lhdi69p
    -------------
    Vậy là hoàn tất rồi, chúc các bạn thành công, nếu gặp trở ngại nào thì PM ở dưới mình sẽ trả lời ngay nha ^_^ thank mọi ngườ dã theo dõi bài viết của mình b-(
    --------
    Bài viết của tranhuyvc - congdongjava.com
    Ghi rõ nguồn congdongjava.com khi sao chép bài viết này
  2. phamhunglinh

    phamhunglinh New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    hay wa hoho
  3. Kujuna

    Kujuna New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Anh ơi đánh nhầm chữ kìa, ".docx" chứ ạk. Làm gì có ".docs".
  4. vhtnha

    vhtnha Moderator Staff Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    được có cái nầy sài đc tuy có sai chúc ít nhưng củng hiểu đc.
    thank em trai :)
  5. tranhuyvc

    tranhuyvc Administrator Staff Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    ac, em đang viết tiếp mà mấy a, từ từ, sắp xong rồi
  6. tranhuyvc

    tranhuyvc Administrator Staff Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Đã hoàn thành xong bài viết, pà con vô ủng hộ, hay thì click THANKS dùm Huy nhé ^-^
  7. kim

    kim Super Moderator Staff Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Hay quá! Cái này sẽ là một phần trong project của em trong tương lai.
    Cám ơn anh Huy về bài viết!
  8. meobeo

    meobeo New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Gớm, bới lông tìm vết thế, :))
  9. phanxung

    phanxung New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Chào anh Huy và mọi người! Em muốn truy vấn lọc dữ liệu trong Ireport. Anh và mọi người ai biết chỉ dùm em nhé! Thanks!
  10. woohyukvn

    woohyukvn New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Mình đang dùng bài này để làm project SEM 2 tại APTECH. Rất cám ơn chủ thread. Nhưng mình có 1 lỗi là :
    chạy đến
    thì cái InputStream nó hay báo là null. Ai làm rồi chỉ mình đoạn này với, mình thay hẳn path đẫn đến file vào fillReport cũng k đc :(
  11. kataykaty

    kataykaty Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    @woohyukvn: không biết bạn làm project web hay là project application.
  12. dominic112233

    dominic112233 Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    nếu nhớ ko nhầm thì Project Sem2 của FPTAptech là project Application:D
  13. truonghx

    truonghx New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Xem lại đường dẫn có đúng ko.
    Có thể thay 2 lệnh đấy bằng lệnh như sau:
    JasperReport report = JasperCompileManager.compileReport(input);
    JasperPrint print = JasperFillManager.fillReport(report, parameter, conn);
  14. nguyen_manh_hung

    nguyen_manh_hung New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    hi bác Huy làm ở VDC sao ấy, nhìn quen quen,Thank bác nhé
  15. tvh1303

    tvh1303 New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Code mình làm giống như hướng dẫn nhưng gặp lỗi tại dòng :

    PHP:
    JasperPrint jasperPrint JasperFillManager.fillReport(ismapCon());
    PHP:
    Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundErrororg/apache/commons/logging/LogFactory
            at net
    .sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:60)
            
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:376)
            
    at GUI.TestReport.jButton1ActionPerformed(TestReport.java:80)
            
    at GUI.TestReport.access$000(TestReport.java:27)
            
    at GUI.TestReport$1.actionPerformed(TestReport.java:51)
    Vậy là sao nhỉ?
  16. tranhuyvc

    tranhuyvc Administrator Staff Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Bạn chưa add đủ lib vào, coi lại đi nhé, download lib về add vô hết ^+^. good lucky
  17. tvh1303

    tvh1303 New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Đúng là mình add thiếu lib thật. Nhưng add xong khi chạy nó báo Null là sao ? Mình để file .jasper trong thư mục src mà (src/report5.jasper)?
  18. HuuBien131211

    HuuBien131211 New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    bạn có thể dùng hàm sau để lấy về InputStream object
    PHP:
    protected InputStream getInputStream(String reportName) {
            
    URL url getClass().getResource("folder path in project" reportName);
            
    InputStream input null;

            try {
                
    input url.openStream();
                return 
    input;
            } catch (
    IOException ex) {
                
    setError("lỗi truy cập report file");
                return 
    null;
            }
        }
    mình thường xuyên dùng hàm này để lấy về đối tượng InputStream.
    nếu có lỗi xảy ra. bạn hãy kiểm tra lại tên report và đường dẫn đến thư mục

    ví dụ Project của bạn tên là ABC đặt các file jasper tại com/report thì để folder path như sau : "/com/report/"

    Chúc bạn thành công.
  19. tvh1303

    tvh1303 New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Vẫn ko đc. Nếu để file .jasper nằm trong src (src/report5.jasper) thì nó báo null.

    Còn nếu đặt nó ngang hàng với src thì nó lại báo thế này :

    PHP:
    Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundErrororg/codehaus/groovy/control/CompilationFailedException
            at java
    .lang.Class.getDeclaredConstructors0(Native Method)
            
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
            
    at java.lang.Class.getConstructor0(Class.java:2699)
            
    at java.lang.Class.newInstance0(Class.java:326)
            
    at java.lang.Class.newInstance(Class.java:308)
    tại dòng

    PHP:
    JasperPrint jasperPrint JasperFillManager.fillReport(ismapCon());
  20. pootay321

    pootay321 New Member

    Ðề: Tổng quan về report và các triển khai report trong Java - How to use report in Java

    Gọi ireport trong Java web thi sao Huy, cho mình đoạn code đó đi, mình tạo được file jaspaer rồi giờ ko biết gọi vào sao đây???giup mình với

Chia sẻ trang này


Quan ly con cai |Viet Track |Giam sat dien thoai