web-dev-qa-db-ja.com

Spring JdbcTemplateを使用して1つの文字列を抽出する

JdbcTemplateクエリを使用してテーブルから1つの文字列を取得する方法を見つけることができないようです。これは私のSQLが返すテーブルです:

ID | STREET_NAME
------------------------
1  | Elm street

さて、STREET_NAMEの値を取得する方法を教えてください。 SQLは常に1行を返すため、複数の行を返すことを心配する必要はありません。

背景情報の一部: 同じクエリの内部結合とカウント

Tony Starkの回答を使用してテーブルを取得します。

しかし、どうすればJdbcTemplateを使用して「Elm street」を抽出できますか?

12
lkallas

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;
}
28
JLewkovich

テーブル(または結合を含むクエリ)から1つの列「文字列」のみを取得する場合は、列の名前を言う必要があります。

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;
}
4
Laszlo Lugosi