首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring: JDBC模板无效列类型

Spring: JDBC模板无效列类型
EN

Stack Overflow用户
提问于 2017-12-15 12:50:09
回答 2查看 2.9K关注 0票数 0

使用下面的代码从表中获取数据列表,但获得无效的列错误。

代码语言:javascript
运行
复制
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);

异常

代码语言:javascript
运行
复制
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

有人知道为什么我们不能获得基于字符串列的数据吗?

EN

回答 2

Stack Overflow用户

发布于 2021-06-02 13:39:45

我最近也面临着同样的问题。在我的例子中,我使用的是JdbcTemplate而不是NamedParameterJdbcTemplate。我不确定你的问题是否相同。

您可以定义一个类型为NamedParameterJdbcTemplate的bean,然后在您的存储库类中自动创建它。

配置类:

代码语言:javascript
运行
复制
@Bean
public NamedParameterJdbcTemplate yourNamedParameterJdbcTemplate(DataSource yourDataSource) {
    return new NamedParameterJdbcTemplate(yourDataSource);
}

存储库类:

代码语言:javascript
运行
复制
@Repository
public class YourRepositoryImpl implements YourRepository {

@Autowired
NamedParameterJdbcTemplate jdbcTemplate;
票数 3
EN

Stack Overflow用户

发布于 2017-12-15 13:07:00

尝试传递这样的参数:

代码语言:javascript
运行
复制
String sql = "SELECT * FROM employees WHERE emp_status = ?";
List<Employee> employees = jdbcTemplate.queryForList(
        sql,
        new Object[]{"Active"},
        new BeanPropertyRowMapper<Employee>(Employee.class)
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47832775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档