在 Java 17 上,最新的 databricks-jdbc 依赖项,Spring 5.3.20
当我使用 JdbcTemplate 查询表并且其中一个参数是布尔值时,我收到一条错误消息:
查询:
SELECT rowkey, sendReminder FROM SOME_TABLE WHERE sendReminder = ?
参数:true(布尔值)
错误:
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT rowkey, sendReminder FROM SOME_TABLE WHERE sendReminder = ?]; SQL state [HY000]; error code [500352]; [Databricks][JDBCDriver](500352) Error getting the parameter data type: HIVE_PARAMETER_QUERY_DATA_TYPE_ERR_NON_SUPPORT_DATA_TYPE; nested exception is java.sql.SQLException: [Databricks][JDBCDriver](500352) Error getting the parameter data type: HIVE_PARAMETER_QUERY_DATA_TYPE_ERR_NON_SUPPORT_DATA_TYPE
```at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1542)```
当我运行相同的查询但在 Java 代码中使用 PraparedStatement 时,查询有效。
有人见过这个吗?已知问题?
谢谢!
数据类型是布尔型 - 除非我弄错了,否则它是受支持的,因为我做了以下 2 个实验:
jdbcTemplate.queryForList(sql, args.toArray(), argTypes);
结果集结果集 = null; 尝试(PreparedStatement准备语句= dataSource.getConnection()。prepareStatement(sql)){ preparedStatement.setBoolean(1, (Boolean) args.get(0));
两者都工作正常。我对 JdbcTemplate 源代码进行了一些深入调试,似乎仅使用 queryForList(sql, args) 时,布尔值的参数类型被标记为“java.sql.Types.BIT”。根据 JDBC 规范,这是可以接受的,但 Databricks 无法处理该问题。 spring-jdbc jdbcTemplate(sql, args) 方面并没有错,只是采用了“最佳猜测”。