我正在尝试使用雪花功能 TABLE(RESULT_SCAN(queryId))
在spring引导java应用程序中使用jdbctemplate。我希望此函数在准备好的语句中工作,但它不工作,因为?不会被提供的参数替换。注意:SpringBootJDBCTemplate正在根据提供的参数创建一个准备好的语句。
执行查询的代码:
String queryId = "99352ad6-a577-48e5-9b99-07f1f7dd6fc6"; //let's just use this as an example
String sql = "SELECT COUNT(*) FROM TABLE(RESULT_SCAN(?))";
Integer total = jdbcTemplate.queryForObject(sql,
new Object[]{queryId},
new int[]{Types.VARCHAR},
Integer.class);
这将导致一个例外:
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [SELECT COUNT(*) FROM TABLE(RESULT_SCAN(?))]; SQL compilation error:
argument needs to be a string: '1'; nested exception is net.snowflake.client.jdbc.SnowflakeSQLException: SQL compilation error:
argument needs to be a string: '1'
我怎样才能得到它 TABLE(RESULT_SCAN(?))
在事先准备好的声明中工作?
2条答案
按热度按时间taor4pac1#
试着投出
queryId
要设置字符串,请执行以下操作:vh0rcniy2#
雪花文档声明queryid是uuid。我将验证它是否是有效的uuid,这将确保它不易受到sql注入的攻击,而不是尝试将其作为preparedstatement中的参数使用。