似乎找不到使用JdbcTemplate查询从表中获取一个字符串的方法。 这是我的sql返回的表:
ID | STREET_NAME
------------------------
1 | Elm street
现在我应该如何获得STREET_NAME的价值。 SQL总是返回一行,因此无需担心返回多行。
有关背景信息: INNER JOIN and COUNT in the same query
使用Tony Stark回答我的桌子。
但是如何使用JdbcTemplate从中提取“Elm street”?
答案 0 :(得分:26)
了解SQL查询的内容会有很多帮助,但假设它类似于SELECT ID,STREET_NAME FROM table WHERE ID=1;
代码:
public String getStreetNameById(int id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "SELECT ID,STREET_NAME FROM table WHERE ID=?";
String streetName = (String) jdbcTemplate.queryForObject(
sql, new Object[] { id }, String.class);
return streetName;
}
答案 1 :(得分:4)
如果您只想从表中获取一个“string”列(或任何带有连接的查询),则必须说明该列的名称。
顺便说一句,使用 SELECT * FROM TABLE 是一种非常糟糕的做法。我打赌你这样做了。
@JLewkovich修改代码:
public String getStreetNameById(int id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "SELECT STREET_NAME FROM table WHERE ID=?";
String streetName = (String) jdbcTemplate.queryForObject(
sql, new Object[] { id }, String.class);
return streetName;
}
但如果有0个或多个结果怎么办? 想一想!
但是要获得一个序列值(在Oracle中),这应该可行。
public Long getSequence() {
Long seq;
String sql = "select SEQ_XY.NEXTVAL from dual";
seq = jdbcTemplateObject.queryForObject(sql, new Object[] {}, Long.class);
return seq;
}
答案 2 :(得分:0)
我通常这样做:
String result = DataAccessUtils.singleResult(
jdbcTemplate.queryForList(
"SELECT street_name FROM table WHERE id = :id",
Collections.singletonMap("id", id),
String.class
)
)
使用queryForList 代替 queryForObject 处理空结果。 queryForObject 会为空结果抛出EmptyResultDataAccessException。通常这不是您想要的行为。
DataAccessUtils.singleResult + queryForList :