这是我尝试执行的代码片段。
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
。
如何在查询中正确获取模式名称?
好吧,除了值(插入/更新)或准备好的语句中的 where 表达式之外,不可能使用参数占位符(
?
或 :<paramname>
)。您需要自己设置可配置的模式名称。但要小心并确保不要为 sql 注入打开大门。在使用名称之前验证该名称。最简单的名称验证器将避免空格,只允许字符、数字和下划线。第一次开始,您可以使用以下正则表达式进行验证:^[a-zA-Z0-9_]+$
永远不要使用未经检查的代码,所以不要相信我未经检查的:-)