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我在程序当中 传入 中文字符串 "北京",但是无法查询到结果
...全文
71 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,397

社区成员

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

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