如何传递参数进行查询?

Ric*_*ari 14 sql jasper-reports parameter-passing

我正在尝试为我的应用程序编写查询,但我遇到了一些麻烦.我需要传递一个参数作为我的数据库的一个字段,如:

SELECT name, phone, email 
FROM company 
WHERE $P{clause} = $P{key}
ORDER BY $P{order}
Run Code Online (Sandbox Code Playgroud)

因为WHERE子句和ORDER BY子句是动态的,供用户选择.

使用$P{}它不起作用.

Ale*_*x K 26

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

  • $ P {paramName}语法主要用于设置WHERE输入参数值.替换算法是"聪明",它的实现使用java.sql.PreparedStatement中:为java.lang.String中参数的发动机将取代$ P {}参数名称与引用值,java.lang.Integer中 -用数值等.

例子:

| Parameter name |  Parameter type   | Parameter value |
|:---------------|-------------------|:---------------:|
|   eventName    | java.lang.String  |  Olympic Games  |
|   eventType    | java.lang.Integer |       2         |

原始表达(替换):

SELECT startDate, endDate, rating FROM events WHERE name=$P{eventName} AND type=$P{eventType} 
Run Code Online (Sandbox Code Playgroud)

结果将是:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND type=2 
Run Code Online (Sandbox Code Playgroud)
  • $ P!{paramName}语法主要用于执行"简单"替换.

例子:

| 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       |

原始表达(替换):

SELECT startDate, endDate, rating FROM $P!{tableName} WHERE name='$P!{eventName}' AND channel=$P!{channel} AND type=$P!{type} 
Run Code Online (Sandbox Code Playgroud)

结果将是:

SELECT startDate, endDate, rating FROM events WHERE name='Olympic Games' AND channel='BBC' AND type=sport
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此报告参数,并查看此查询示例.


在你的情况下,正确的表达式可能是这样的:

SELECT name, phone, email FROM company WHERE $P!{clause} = $P{key} ORDER BY $P!{order}
Run Code Online (Sandbox Code Playgroud)

其中$ P {key}java.lang.String参数

或者像这样(它取决于$ P!{clause}值)

SELECT name, phone, email FROM company WHERE $P!{clause} = $P!{key} ORDER BY $P!{order}
Run Code Online (Sandbox Code Playgroud)

其中$ P {key}java.lang.String参数