Sql 如何将参数传递给查询?

Sql 如何将参数传递给查询?,sql,jasper-reports,parameter-passing,Sql,Jasper Reports,Parameter Passing,我正试图为我的应用程序编写一个查询,但遇到了一些问题。我需要将数据库的一个字段作为参数传递,如: 选择姓名、电话、电子邮件 从公司 其中$P{子句}=$P{key} 按$P{ORDER}排序 因为WHERE子句和ORDERBY子句是动态的,用户可以选择 使用$p{}无效。JasperReports中有两个用于参数引用的语法表达式:$p{}和$p!{} $P{paramName}语法主要用于设置输入参数值的位置。替换算法是“智能”的,其实现使用:对于java.lang.String参数,引擎将

我正试图为我的应用程序编写一个查询,但遇到了一些问题。我需要将数据库的一个字段作为参数传递,如:

选择姓名、电话、电子邮件
从公司
其中$P{子句}=$P{key}
按$P{ORDER}排序
因为WHERE子句和ORDERBY子句是动态的,用户可以选择


使用
$p{}
无效。

JasperReports中有两个用于参数引用的语法表达式:
$p{}
$p!{}

  • $P{paramName}语法主要用于设置输入参数值的位置。替换算法是“智能”的,其实现使用:对于java.lang.String参数,引擎将用引号替换$P{parameterName},对于java.lang.Integer,引擎将用数值替换,以此类推
样本:

| Parameter name | Parameter type | Parameter value | |:---------------|-------------------|:---------------:| | eventName | java.lang.String | Olympic Games | | eventType | java.lang.Integer | 2 | | Parameter name | Parameter type | Parameter value | |:---------------|------------------:|:---------------:| | tableName | java.lang.String | events | | eventName | java.lang.String | Olympic Games | | channel | java.lang.String | 'BBC' | | type | java.lang.String | sport | 结果将是:

  • $P!{paramName}语法主要用于执行“简单”替换
样本:

| Parameter name | Parameter type | Parameter value | |:---------------|-------------------|:---------------:| | eventName | java.lang.String | Olympic Games | | eventType | java.lang.Integer | 2 | | Parameter name | Parameter type | Parameter value | |:---------------|------------------:|:---------------:| | tableName | java.lang.String | events | | eventName | java.lang.String | Olympic Games | | channel | java.lang.String | 'BBC' | | type | java.lang.String | sport | 结果将是:


有关更多信息您可以阅读这篇文章并查看


在您的情况下,正确的表达可能如下:

选择公司名称、电话、电子邮件,其中$P!{子句}=$P{key}按$P排序!{顺序}
其中,$p{key}是一个java.lang.String参数

或者类似这样(取决于$p!{clause}值)

选择公司名称、电话、电子邮件,其中$P!{子句}=$P!{key}按$P订购!{顺序}

其中,$p{key}是一个java.lang.String参数

如果需要按参数排序,请尝试以下操作:

SELECT name, phone, email ,(case when $P{order} = 'name' then name when $P{order} = 'phone' then phone else email end) as orderlist
FROM company 
WHERE $P{clause} = $P{key}
ORDER BY orderlist

这里需要注意的重要一点是,参数显然需要是一个包含多个值的字符串,每个值用单引号括起来,用逗号分隔。在我的测试中,如果没有单引号,它似乎不起作用。