Spring 启动 - 没有这样的列异常
Spring Boot - no such column exception
我正在编写一个 Spring 批处理/引导应用程序以将数据从 informix 数据库提取到 java 数据对象,但我无法弄清楚 java.sql.SQLException
:没有这样的列名问题。
这是方法:
public UserDo getUserAddress(UserDo item) {
try {
myJdbcTemplate.queryForObject(getUserAddressQuery, new RowMapper<UserDo>() {
@Override
public UserDo mapRow(ResultSet rs, int arg1) throws SQLException {
try {
item.setAddressLine1(rs.getString("cad_add_line_1"));
item.setAddressLine2(rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4"));
item.setCity(rs.getString("cad_city_name"));
item.setState(rs.getString("cad_ste_prv_cd"));
item.setZip(rs.getString("cad_postal_code" + "cad_postal_cd_4"));
item.setCountry(rs.getString("cad_country_code"));
} catch (SQLException sqle){
logger.error(sqle.getMessage(), sqle);
}
return item;
}
}, item.getUserId());
} catch (EmptyResultDataAccessException erdae) {
logger.error(erdae.getMessage(), erdae);
} catch (IncorrectResultSizeDataAccessException irsdae) {
logger.error(irsdae.getMessage(), irsdae);
}
return item;
}
这是 JdbcTemplate
正在执行的查询:
private final String getUserAddressQuery = "select cad_add_line_1, cad_add_line_2, cad_add_line_3, cad_add_line_4, cad_city_name, cad_ste_prv_cd, cad_postal_code, cad_postal_cd_4, cad_country_code, cad_county_parrish "
+ "from user_address "
+ "where user_id = ? "
+ "and user_type_code = '03' ";
table 列值都是 CHAR
类型,列大小范围从 3
到 35
。
数据对象属性都是字符串类型。
这个方法是从我的 ItemProcessor
.
调用的
当我使用调试器时,ResultSet
对象似乎是空的。我认为问题是从 informix CHAR
读取到 Java String
。这是因为另一种方法做完全相同的事情,除了从 informix INTEGER
读取到 Java int
,工作完美。
请帮忙。
您的问题在这里:
rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4")
这将编译为:
rs.getString("cad_add_line_2cad_add_line_3cad_add_line_4")
而且我强烈怀疑不存在这样的专栏。
你的意思是:
rs.getString("cad_add_line_2")
+ rs.getString("cad_add_line_3")
+ rs.getString("cad_add_line_4")
您在这里遇到了完全相同的问题:
rs.getString("cad_postal_code" + "cad_postal_cd_4")
我正在编写一个 Spring 批处理/引导应用程序以将数据从 informix 数据库提取到 java 数据对象,但我无法弄清楚 java.sql.SQLException
:没有这样的列名问题。
这是方法:
public UserDo getUserAddress(UserDo item) {
try {
myJdbcTemplate.queryForObject(getUserAddressQuery, new RowMapper<UserDo>() {
@Override
public UserDo mapRow(ResultSet rs, int arg1) throws SQLException {
try {
item.setAddressLine1(rs.getString("cad_add_line_1"));
item.setAddressLine2(rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4"));
item.setCity(rs.getString("cad_city_name"));
item.setState(rs.getString("cad_ste_prv_cd"));
item.setZip(rs.getString("cad_postal_code" + "cad_postal_cd_4"));
item.setCountry(rs.getString("cad_country_code"));
} catch (SQLException sqle){
logger.error(sqle.getMessage(), sqle);
}
return item;
}
}, item.getUserId());
} catch (EmptyResultDataAccessException erdae) {
logger.error(erdae.getMessage(), erdae);
} catch (IncorrectResultSizeDataAccessException irsdae) {
logger.error(irsdae.getMessage(), irsdae);
}
return item;
}
这是 JdbcTemplate
正在执行的查询:
private final String getUserAddressQuery = "select cad_add_line_1, cad_add_line_2, cad_add_line_3, cad_add_line_4, cad_city_name, cad_ste_prv_cd, cad_postal_code, cad_postal_cd_4, cad_country_code, cad_county_parrish "
+ "from user_address "
+ "where user_id = ? "
+ "and user_type_code = '03' ";
table 列值都是 CHAR
类型,列大小范围从 3
到 35
。
数据对象属性都是字符串类型。
这个方法是从我的 ItemProcessor
.
ResultSet
对象似乎是空的。我认为问题是从 informix CHAR
读取到 Java String
。这是因为另一种方法做完全相同的事情,除了从 informix INTEGER
读取到 Java int
,工作完美。
请帮忙。
您的问题在这里:
rs.getString("cad_add_line_2" + "cad_add_line_3" + "cad_add_line_4")
这将编译为:
rs.getString("cad_add_line_2cad_add_line_3cad_add_line_4")
而且我强烈怀疑不存在这样的专栏。
你的意思是:
rs.getString("cad_add_line_2")
+ rs.getString("cad_add_line_3")
+ rs.getString("cad_add_line_4")
您在这里遇到了完全相同的问题:
rs.getString("cad_postal_code" + "cad_postal_cd_4")