Java 将sql参数传递给jdbcTemplate.query时,我得到一个带有对象args的SQLException
我正试图使用Calcite Avatica JDBC驱动程序,通过Spring引导项目调用示例Druid数据库。按照大多数示例,我创建了这个查询,如果我传递Java 将sql参数传递给jdbcTemplate.query时,我得到一个带有对象args的SQLException,java,spring-boot,spring-jdbc,jdbctemplate,apache-calcite,Java,Spring Boot,Spring Jdbc,Jdbctemplate,Apache Calcite,我正试图使用Calcite Avatica JDBC驱动程序,通过Spring引导项目调用示例Druid数据库。按照大多数示例,我创建了这个查询,如果我传递newobject[]{cityName},它会抛出一个异常。然而,如果我传递Object[]{}我不会得到相同的异常 String cityName = "Aachen"; results = jdbcTemplate.query("SELECT cityName, countryName FROM wik
newobject[]{cityName}
,它会抛出一个异常。然而,如果我传递Object[]{}
我不会得到相同的异常
String cityName = "Aachen";
results = jdbcTemplate.query("SELECT cityName, countryName FROM wikipedia WHERE cityName = ?",
new Object[] { cityName },
(rs, rowNum) -> {
return new City(cityName, rs.getString("countryName"));
}
);
这是个例外
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT cityName, countryName FROM wikipedia WHERE cityName = ?]; SQL state [00000]; error code [-1]; Error -1 (00000) : while preparing SQL: SELECT cityName, countryName FROM wikipedia WHERE cityName = ?; nested exception is org.apache.calcite.avatica.AvaticaSqlException: Error -1 (00000) : while preparing SQL: SELECT cityName, countryName FROM wikipedia WHERE cityName = ?
如果切换到NamedParameterJdbcTemplate
namedParameterJdbcTemplate.query("SELECT cityName, countryName, comment FROM wikipedia WHERE cityName = :cityName",
new MapSqlParameterSource()
.addValue("cityName", "Aachen"),
(rs, rowNum) -> {
return new SponsoredPostStats(sponsoredPostId, rs.getInt("views"), "");
}
查看bug列表-Druid不支持预先准备好的语句。在您使用
NamedParameterJdbcTemplate
的第二个代码段中,您似乎在寻找一个名为views
的列,但在SELECT
语句中没有该列。也许可以修改一下,然后再试一次。在这之前它会出错——看看文档,看起来德鲁伊不支持预先准备好的语句