繁体   English   中英

Spring:JDBC 模板无效的列类型

[英]Spring: JDBC Template Invalid column type

使用以下代码从表中获取数据列表但获取无效列错误。

String sql = "select * from employees  WHERE emp_status = :statusCode";
Map parameters = new HashMap();
parameters.put("statusCode", "Active");
MapSqlParameterSource parametersSourceMap = new MapSqlParameterSource(parameters );

List<Employee> employees rowSet = jdbcTemplate.queryForList(sql, parametersSourceMap);

例外

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select * from employees  WHERE emp_status = :statusCode SQL state [null]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
        at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812)
        at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868)
        at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)
        at com.spring.EmployeeDAOImpl.addEmployee(EmployeeDAOImpl.java:46)
        at com.spring.MainApp.main(MainApp.java:33)
    Caused by: java.sql.SQLException: Invalid column type

表的列为 Varchar2

任何人都知道为什么我们不能基于 String 列获取数据?

尝试传递这样的参数:

String sql = "SELECT * FROM employees WHERE emp_status = ?";
List<Employee> employees = jdbcTemplate.queryForList(
        sql,
        new Object[]{"Active"},
        new BeanPropertyRowMapper<Employee>(Employee.class)
);

我最近遇到了同样的问题。 就我而言,我使用的是 JdbcTemplate 而不是 NamedParameterJdbcTemplate。 我不确定您的问题是否相同。

您可以定义 NamedParameterJdbcTemplate 类型的 bean,然后在您的存储库类中自动装配它。

配置类:

@Bean
public NamedParameterJdbcTemplate yourNamedParameterJdbcTemplate(DataSource yourDataSource) {
    return new NamedParameterJdbcTemplate(yourDataSource);
}

存储库类:

@Repository
public class YourRepositoryImpl implements YourRepository {

@Autowired
NamedParameterJdbcTemplate jdbcTemplate;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM