JasperReport涉及中文的查询问题

风尘中国 2012-07-30 04:13:11
在学习JasperReport开发的时候遇到一个非常头痛的问题,

背景是我希望能够书写一个动态的sql,能够调整where后的查询参数,因此定义了一个 parameter,

希望能在JasperFillManager填充数据的时候 通过Map传入相应的值,类似 PreparedStatment的预定义

参数那样的效果。

在书写 查询的SQL的时候发现 定义了parameter但凡是带有中文的都无法完成查询,具体的xml文件贴出来

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="libreport1" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<style name="cn" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"/>
<parameter name="author" class="java.lang.String"/>
<parameter name="hoster" class="java.lang.String">
<defaultValueExpression><![CDATA[new java.lang.String("360教育部")]]></defaultValueExpression>
</parameter>
<parameter name="min" class="java.lang.Integer">
<defaultValueExpression><![CDATA[new Integer(5150)]]></defaultValueExpression>
</parameter>
<parameter name="max" class="java.lang.Integer">
<defaultValueExpression><![CDATA[new Integer(5160)]]></defaultValueExpression>
</parameter>
<parameter name="uniname" class="java.lang.String">
<defaultValueExpression><![CDATA[new String("清华大学")]]></defaultValueExpression>
</parameter>
<parameter name="province" class="java.lang.String">
<defaultValueExpression><![CDATA[new java.lang.String("北京")]]></defaultValueExpression>
</parameter>
<parameter name="code" class="java.lang.String">
<defaultValueExpression><![CDATA[new java.lang.String("10027")]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM university where province=$P{province}]]>
</queryString>
<field name="id" class="java.lang.Long"/>
<field name="code" class="java.lang.String"/>
<field name="name" class="java.lang.String"/>
<field name="province" class="java.lang.String"/>
<field name="type" class="java.lang.String"/>
<field name="unitclass" class="java.lang.String"/>
<field name="hoster" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement style="cn" x="220" y="23" width="160" height="20"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[实验室的IReport开发]]></text>
</staticText>
<textField>
<reportElement x="478" y="59" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$P{author}]]></textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height="35" splitType="Stretch">
<textField>
<reportElement x="325" y="15" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$P{hoster}]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="67" y="2" width="100" height="20"/>
<textElement/>
<text><![CDATA[code]]></text>
</staticText>
<staticText>
<reportElement x="200" y="2" width="100" height="20"/>
<textElement/>
<text><![CDATA[name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="325" y="75" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$P{uniname}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="67" y="38" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{code}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="37" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch">
<textField>
<reportElement x="273" y="15" width="100" height="20"/>
<textElement/>
<textFieldExpression class="java.lang.String"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>

关键的查询语句是

<queryString>
<![CDATA[SELECT * FROM university where province=$P{province}]]>
</queryString>

这里的参数province我在程序当中 传入 中文字符串 "北京",但是无法查询到结果
...全文
63 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧