在 Spring jdbc 模板中将架构名称作为参数传递不起作用

问题描述 投票:0回答:1

这是我尝试执行的代码片段。

String schema = _2022_12_003_data
final String s = "SELECT * FROM ?.network limit 1";
final List<Map<String, Object>> maps = jdbcTemplate.queryForList(s, schema);

我正在尝试传递架构名称,但它给了我一个例外

Caused by: org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0. 

我尝试通过

spring.datasource.url
Connection.setSchema
传递模式名称,但似乎没有以这种方式添加模式名称。我还尝试将参数作为 MapSqlParameterSource 传递,但我得到了另一个异常
Can't infer the SQL type to use for an instance of org.springframework.jdbc.core.namedparam.MapSqlParameterSource

如何在查询中正确获取模式名称?

postgresql spring-boot spring-jdbc jdbctemplate
1个回答
0
投票

好吧,除了值(插入/更新)或准备好的语句中的 where 表达式之外,不可能使用参数占位符(

?
:<paramname>
)。您需要自己设置可配置的模式名称。但要小心并确保不要为 sql 注入打开大门。在使用名称之前验证该名称。最简单的名称验证器将避免空格,只允许字符、数字和下划线。第一次开始,您可以使用以下正则表达式进行验证:
^[a-zA-Z0-9_]+$

永远不要使用未经检查的代码,所以不要相信我未经检查的:-)

© www.soinside.com 2019 - 2024. All rights reserved.