2016-05-17 3 views
0

として渡された値を持つクエリでの句です:それはJavaFXのテキストフィールドからのユーザー入力を取っている表のデータソースは無視して、私はSQLクエリとレポートを生成しようとしているパラメータ

SELECT brand.id,brand.brand,model.model FROM brand INNER JOIN model ON brand.id=model.id AND model.id=$P{ID} 

。 Model.idは1つのInteger、たとえば1に置き換えられ、1つの行だけを出力する必要があります。しかし、このパラメータをJasperReportsのレポートに渡しているときは、テーブルで使用できるすべての行が出力されています。

Javaコード:

@FXML 
public TextField one; 

public void click(ActionEvent event) throws JRException, SQLException, ClassNotFoundException, IllegalAccessException, UnsupportedLookAndFeelException, InstantiationException { 
    String reportSrcFile = "/home/sample/learn.jrxml"; 

    // First, compile jrxml file. 
    JasperReport jasperReport1 = JasperCompileManager.compileReport(reportSrcFile); 

    Connection conn = SqliConnect.getMySQLConnection(); 

    // Parameters for report 
    int two = Integer.parseInt(one.getText()); 
    Map<String, Object> parameters = new HashMap<String, Object>(); 
    parameters.put("ID",one.getText());//The Exact Parameter name is "ID" in the jrxml file. 

    JasperPrint print = JasperFillManager.fillReport(jasperReport1, 
      parameters, conn); 

    JasperViewer jv = new JasperViewer(print); 
    jv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    jv.setTitle("Test Report"); 

    jv.setVisible(true); 
} 

レポートのテンプレート:

<subDataset name="Dataset1" uuid="2691431f-5c6f-403f-94cc-829c17ef1636"> 
    <queryString> 
     <![CDATA[SELECT brand.id,brand.brand,model.model FROM brand INNER JOIN model]]> 
    </queryString> 
    <field name="id" class="java.lang.Integer"/> 
    <field name="brand" class="java.lang.String"/> 
    <field name="model" class="java.lang.String"/> 
</subDataset> 
<parameter name="ID" class="java.lang.String"> 
    <defaultValueExpression><![CDATA[$P{REPORT_CONTEXT}.getId()]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[SELECT brand.id,brand.brand,model.model FROM brand INNER JOIN model ON brand.id=model.id AND model.id=$P{ID}]]> 
</queryString> 
<field name="id" class="java.lang.Integer"/> 
<field name="brand" class="java.lang.String"/> 
<field name="model" class="java.lang.String"/> 
<title> 
    <band height="79" splitType="Stretch"> 
     <textField> 
      <reportElement x="11" y="16" width="100" height="30" uuid="d1485589-a4cf-4ab9-b896-0ef480beced4"/> 
      <textFieldExpression><![CDATA[$P{ID}]]></textFieldExpression> 
     </textField> 
    </band> 
</title> 
<detail> 
    <band height="250" splitType="Stretch"> 
     <componentElement> 
      <reportElement x="160" y="50" width="200" height="200" uuid="e199bd58-8408-4711-85d5-ba76db9691b7"> 
       <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
       <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/> 
       <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/> 
       <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/> 
      </reportElement> 
      <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
       <datasetRun subDataset="Dataset1" uuid="7fecdfe6-bed4-433a-97f8-43cc6347c660"> 
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
       </datasetRun> 
       <jr:column width="66" uuid="9a6b765f-b6d4-4753-909e-dd091b296654"> 
        <jr:columnHeader style="Table_CH" height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="66" height="30" uuid="7e644d1c-a893-49df-a18a-bf788eb6b92a"/> 
          <text><![CDATA[id]]></text> 
         </staticText> 
        </jr:columnHeader> 
        <jr:columnFooter style="Table_CH" height="30"/> 
        <jr:detailCell style="Table_TD" height="30"> 
         <textField> 
          <reportElement x="0" y="0" width="66" height="30" uuid="848a53bf-2b2e-46df-a7aa-26fc0b897c85"/> 
          <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="66" uuid="514580a5-f09c-43d1-952e-d4769c2e4686"> 
        <jr:columnHeader style="Table_CH" height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="66" height="30" uuid="c01152e9-1547-472b-946e-92011c02bc94"/> 
          <text><![CDATA[brand]]></text> 
         </staticText> 
        </jr:columnHeader> 
        <jr:columnFooter style="Table_CH" height="30"/> 
        <jr:detailCell style="Table_TD" height="30"> 
         <textField> 
          <reportElement x="0" y="0" width="66" height="30" uuid="98c84ae5-b289-459a-b34b-a9becf43b9ce"/> 
          <textFieldExpression><![CDATA[$F{brand}]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
       <jr:column width="66" uuid="5c1d2026-45bc-4ec8-8be4-c444e47d093d"> 
        <jr:columnHeader style="Table_CH" height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="66" height="30" uuid="81f76de4-a68b-41c3-a2e8-bbaa625b71be"/> 
          <text><![CDATA[model]]></text> 
         </staticText> 
        </jr:columnHeader> 
        <jr:columnFooter style="Table_CH" height="30"/> 
        <jr:detailCell style="Table_TD" height="30"> 
         <textField> 
          <reportElement x="0" y="0" width="66" height="30" uuid="d69c690e-05a4-453a-93ea-9061523975ad"/> 
          <textFieldExpression><![CDATA[$F{model}]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
      </jr:table> 
     </componentElement> 
    </band> 
</detail> 

それを行うための正しい方法は何ですか?

更新:

<subDataset name="Dataset1" uuid="2691431f-5c6f-403f-94cc-829c17ef1636"> 
    <property name="com.jaspersoft.studio.data.sql.tables" value=""/> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Learn"/> 
    <parameter name="ID" class="java.lang.String"/> 
    <queryString> 
     <![CDATA[SELECT brand.id,brand.brand,model.model FROM brand INNER JOIN model ON brand.id=model.id AND model.id=$P{ID}]]> 
    </queryString> 
    <field name="id" class="java.lang.Integer"/> 
    <field name="brand" class="java.lang.String"/> 
    <field name="model" class="java.lang.String"/> 
</subDataset> 

しかし、今、それは空のレポートを生成している: 私は、データソースのパラメータを追加しました。

+0

1)あなたは、WHERE句(Dataset1データ)なしでクエリを使用している:編集した生はここにデータを貼り付ける参照してくださいに* $ P {REPORT_PARAMETER_MAP} *)をテーブルのデータソースに追加します。 3)あなたがメインの質問を持っている場合は、テーブルコンポーネントをタイトルバンドに移動する方が良いです。4)空のクエリを設定できます。 –

+0

あなたのレポートには多くの問題があります。 –

+0

更新を確認してください。私はしようとしたが、今は空白のレポートを生成します。 – kodr

答えて

0

レポートのテーブルコンポーネントは、IDパラメータが定義されておらず、静的クエリのみを含む 'Dataset1'サブデータセットを使用します。サブデータセットでIDパラメータも宣言し、クエリで使用する必要があります。 私は、これは、 三田

PS役に立てば幸い:2)あなたは(パラメータを使用して地図を渡す必要がありますhttp://pastebin.com/ZMjn4jtP

+0

これで空白のレポートが生成されます。私は次のようにパラメータを追加しました: – kodr

+0

私は投稿を更新しました。何か間違っているのですか?それは空白ページを生成しています – kodr

+0

次もチェックしてください。サブデータセットの 'id'フィールドはjava.lang.Integer型で、IDパラメータはjava.lang.String型です。この場合、クエリの 'model.id = $ P {ID}'という表現は常にfalseを返します。フィールドとパラメータの両方をIntegerにします。 – shertage

関連する問題