انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة

اذهب الى الأسفل

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة Empty انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة

مُساهمة من طرف أحمد مناع في السبت فبراير 15, 2014 11:44 am

بسم الله الرحمن الرحيم

أهلا و سهلا بكم إخوانى الكرام .... فى دروس سابقة تحدثنا عن كيفية انشاء تقارير #JasperReports مع iReport وقمنا بانشاء تقرير بسيط و عرض و تشغلية من خلال تطبيقات الجافا وهذا التقرير كان لا يحتوي الا على بعض النصوص الثابتة أو بمعنى اوضح لا يحتوي على بيانات ديناميكية لكن اذا اردنا غنشاء تقارير دينامكية المحتوي فلابد أن نستخدم مصارد البيانات #datasources

_مصدر البيانات datasources :هو ما يستخدمه المكتبة #JasperReports للحصول على البيانات لتوليد تقارير دينامكية المحتوي وتوجد عدة مصادر يمكنك استخدامها وهى على النحو التالى :



  • Databases

  • TableModels

  • Java objects

  • XML fles



و سنناقش في هذا المقال كيفية استخدام قواعد البيانات databases كمصدر بيانات datasources . أما فى المقالات التالية سوف يناقش الانواع الاخرى من مصادر البيانات

توليد تقارير ديناميكي باستخدام قاعدة البيانات كمصدر للبيانات


هناك طريقتان لإنشاء تقارير من قاعدة البيانات وهما :


  1. الاولى : بتضمين إستعلامات SQL في قالب تقرير JRXML 
  2. الثانية :  بتمرير البيانات من قاعدة البيانات إلى التقرير بإستخدام JRResultSetDataSource 



فى هذا المقال سنشرح الطريقة الاولى _أما الطريقة سنتعرف عليها فى مقالات لاحقة _لذلك قبل أن نبدء ندعونا نفترض أن لدينا قاعدة بيانات باسم Employees وتحتوي على جدول باسم Info بالحقول التالية :


INTEGERId
VARCHARName
VARCHARJob

هذا الجدول يحتوى على البيانات التالية :


 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة 127532907


تضمين إستعلام SQL في قالب تقرير JRXML  ويتم ذلك بطريقتين:

1_الطريقة الاولى : تضمين إستعلام SQL برمجيا بإستخدام الشفرة 
2_الطريقة الثانية : تضمين إستعلام SQL بإستخدام المعالج         


وفى هذا المقال سنركز على الطريقة الاولى 

تضمين إستعلام SQL في قالب تقرير JRXML بإستخدام الشفرة :ويتم ذلك باتباع الخطوات التالية :

الخطوة الاولى :أذهب الى التويبب XML لتفتح لك ملف xml لكتابة بعض الشفرات في قالب تقرير #JRXML كمافى الصورة التالية :

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة 858605804

الخطوة الثانية :إستخدام التعليمة <queryString> لانشاء جملة الاستعلام SQL وذلك على النحو التالى :

الكود:

<queryString>
 
<![CDATA[select * from US.INFO]]>

 </queryString>


الخطوة الثالثة :إنشاء متغيرات الحقول field التي يتم ملؤها في وقت التشغيل من جدول قاعدة البيانات لاستخدامها فيما بعد و يجب أن تتطابق أسماء الحقول مع اسم العمود جدول البيانات أو الاسم المقابل له  في جملة الاستعلام SQL مع تحديد نوع بيانات الحقل int,string_على النحو التالى :
 
الكود:
<field name="ID" class="java.lang.Integer">
 </field>


 <field name="NAME" class="java.lang.String">
 </field>


 <field name="JOB" class="java.lang.String">
 </field>


ليصبح ملف xml كما فى الشكل التالى :

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة 761700903

الخطوة الرابعة :إنشاء العنصر textField وهو العنصر الرسومي الذى يستخدم في عرض البيانات النصية الديناميكية في التقارير ويتم إنشائة باستخدام التعليمة <textField> ويجب أن تحتوي داخل تلك التعليمة على الاتي:


  •  التعليمة <reportElement> التى تحدد و تشير إلى ارتفاع حقل النص ،العرض والإحداثيات داخل النطاق   x و y....الخ
  • التعليمة <textFieldExpression> التى تحدد حقول البيانات التي سيتم عرضها في هذا العنصر النصي باستخدام
    الكود:
    $ F {field_name}
    ، حيث field_name هو اسم الحقل الذى تم تعريفة فى الخطوة السابقة وذلك على النحو التالى :


الكود:
<textField>
 <reportElement x="393" y="17" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="393" y="37" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
 </textField>
 <textField>
 <reportElement x="393" y="57" width="100" height="20"/>
 <textFieldExpression><![CDATA[$F{JOB}]]></textFieldExpression>
 </textField>


وهكذا يكون ملف xml كما فى الشكل التالى وجاهز لاستقبال البيانات :

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة 509546682

الخطوة الرابعة و الاخيرة :عرض و تشغيل التقرير وتتطلب تلك الخطوة الاتصال اولا بقاعدة البيانات ثم تمرير كائن الاتصال الى التقرير ...حيث أن JasperReports توفر الكائن #JasperFillManager الذى يقوم بملىء التقرير من خلال الطريقة #fillReport بتمرير التقرير المراد تعبئة بياناته وكائن الاتصال و ذلك على النحو التالى :

الكود:

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class NewMain {

  
    
   public  void FillReport(){
    
    String host = "jdbc:derby://localhost:1527/Employees";
    String username = "US";
    String password = "US";
    Connection con=null;
        
        try {
            
            //إنشاء نص الاتصال بقاعدةالبيانات
             con = DriverManager.getConnection( host, username, password );
            
            //الحصول على مسار التقرير
            InputStream Report =this.getClass().getResourceAsStream("/report/pppp.jasper");
            
            //تعبئة التقرير من قاعدة البيانات  
            JasperPrint jasperPrint = JasperFillManager.fillReport(Report,null,con);
            
            //تشغيل وعرض التقرير
            JasperViewer.viewReport(jasperPrint,false);
              
              
        } catch (SQLException ex) {
            Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
        } catch (JRException ex) {
            Logger.getLogger(NewMain.class.getName()).log(Level.SEVERE, null, ex);
        }
        
      
   }
    
  
    public static void main(String[] args) {
        
       new NewMain().FillReport();
  
    }
}


و النتيجة عند التشغيل :

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة 323562739



أنتهى المقال 
تحياتى


عدل سابقا من قبل أحمد مناع في الأربعاء سبتمبر 18, 2019 9:14 pm عدل 9 مرات

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 968
النقاط : 201748
التقيم : 116
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة Empty رد: انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة

مُساهمة من طرف زهراء في الإثنين فبراير 17, 2014 11:53 am

جزاكم الله خيرا أخى احمد

لكن ايهما افضل فى الطريقتين ؟
زهراء
زهراء
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 401
النقاط : 676
التقيم : 53
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

 انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة Empty رد: انشاء تقارير JasperReports مع iReport ...مقال 5 _التعامل مع مصادر البيانات_قاعدة البيانات كمصدر للبيانات ..1_تضمين إستعلامات SQL بالشفرة

مُساهمة من طرف أحمد مناع في الأربعاء سبتمبر 18, 2019 9:09 pm

@زهراء كتب:جزاكم الله خيرا أخى احمد

لكن ايهما افضل فى الطريقتين ؟

لا فرق بينهم  Very Happy

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 968
النقاط : 201748
التقيم : 116
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى