【问题标题】:Error while creating SQL query with bind variables - JDBCTemplate in Spring使用绑定变量创建 SQL 查询时出错 - Spring 中的 JDBCTemplate
【发布时间】:2019-07-04 09:53:30
【问题描述】:

我是 Spring - JDBC 的初学者。 我正在尝试使用具有绑定变量的查询以及其中的 IN 条件从表中检索employee_id。

我收到了 SQLException

“无效的列类型” - 原因: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; SQL 的未分类 SQLException [选择 来自 table_employee 的employee_id,其中 age=:varTwo 和标记 (:varOne) 和名称 =:varThree]; SQL 状态 [99999];错误代码 [17004]; 无效的列类型;嵌套异常是 java.sql.SQLException: 无效的列类型

你能告诉我哪里错了。

我尝试过使用 Long 、 Integer 、 String 等类型,但我仍然得到“无效的列类型”

年龄是 - NUMBER

标记是 - NUMBER

名称是 - VARCHAR

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("varOne", varOne);
parameters.addValue("varTwo", Long.parseLong(varTwo));
parameters.addValue("varThree", varThree);
Long employeeId = jdbcTemplate.queryForObject("select employee_id from table_employee where age=:varTwo and marks in (:varOne) and name =:varThree" , Long.class , parameters);

我应该得到这个 SQL 的结果作为“员工 ID”。

【问题讨论】:

  • 看起来您没有使用 NamedParameterTemplate - 请edit您的问题并添加初始化您的jdbcTemplate的代码
  • 私有 JdbcTemplate jdbcTemplate; @Autowired public EmployeeImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }
  • 我只是自动接线。
  • 你正在自动连接NamedParameterJdbcTemplate?
  • 不......我不知道

标签: java spring jdbc oracle11g jdbctemplate


【解决方案1】:

我认为 varOne 的类型可能是 Collection。 当你想在 SQL 查询中使用变量时,尤其是在 IN 中,你应该确保变量是正确的类型。

【讨论】:

  • varTwo 是一个 List 这就是我使用 IN 子句的原因。我该如何解决?
  • 否,您可以将 List 应用于“IN”而不是 SQL 中的“=”。 varOne 和 varTwo 一定是你搞错了。你可以试试像select employee_id from table_employee where age=:varOne and name =:varThree and marks in (:varTwo)这样的sql,记住要确保varTwo的类型是java.util.Collection的实例,而varOne是单个元素。
【解决方案2】:

感谢您的回复。我可以通过使用 join 方法将列表变为字符串来进一步进行。

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 2018-05-28
    • 2021-03-14
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多