データベースフィールドの値を使用してリストを作成したいと思います。名前と名前の2つの列があります。フィールドの名前列にすべての名前を格納するリストを作成してから、DTOに追加したいと思います。
これは可能ですか?
あなたが従うことができるステップ: -
List<String>
まず、すべての名前を格納するが必要です。次のように宣言します: -
List<String> nameList = new ArrayList<String>();
これで、すべてのレコードが取得され、 に保存されましたResultSet
。したがって、反復してResultSet
それぞれを取得できると思いますvalues
。ResultSet#getString
を取得するには、を使用する必要がありますname
。
ここで、1 つのレコードをフェッチするたびに、name
フィールドを取得してリストに追加します。
while(resultSet.next()) {
nameList.add(resultSet.getString("name"));
}
について十分な情報を提供していないDTO
ため、これを に追加する方法を見つける必要がありArrayList
ますDTO
。
上記には、必要なだけではなく、list
含まれているだけです。ただし、両方が必要な場合は、フィールドとしてとを含むカスタム DTO を作成する必要があります。そして、それをすべてからインスタンス化し、name
surname
name
(FullName)
name
surname
ResultSet
List<FullName>
残念ながら、JDBC はワンライナーでこれを便利に行う方法を提供していません。ただし、 jOOQなどの他の API もあります(免責事項: 私は jOOQ の背後にある会社で働いています)。
List<DTO> list =
DSL.using(connection)
.fetch("SELECT first_name, last_name FROM table")
.into(DTO.class);
またはSpring JDBC
List<DTO> list =
new JdbcTemplate(new SingleConnectionDataSource(connection, true))
.query("SELECT first_name, last_name FROM table", (rs, rowNum) ->
new DTO(rs.getString(1), rs.getString(2));
またはApache DbUtils :
List<DTO> list =
new QueryRunner()
.query(connection,
"SELECT first_name, last_name FROM table",
new ArrayListHandler())
.stream()
.map(array -> new DTO((String) array[0], (String) array[1]))
.collect(Collectors.toList());
Spring JDBC / Apache DbUtils の例では Java 8 を使用しましたが、古いバージョンの Java でも同様に実行できます。
です。何を試しましたか?
データベースにアクセスするには、JDBC を使用してクエリを実行し、ResultSet
.
2 つのFullName
文字列フィールドと. これらを使用してループに入力するだけですname
surname
rs.getString("NAME"); // column name
rs.getString("SURNAME");
例えば
List<FullName> fullnames = new ArrayList<FullName>();
while (rs.next()) {
fullnames.add(new FullName(rs));
}
オブジェクトを介してResultSet
オブジェクトを直接設定していることに注意してください。代わりに、2 つの名前フィールドを取るコンストラクターを実装することを選択できます。
Fullname
オブジェクトを作成していることにも注意してください。したがって、名/姓は別々に保持され、後でイニシャルなどを自由に追加できます。この名前を変更することをお勧めします。これPerson
により、今後さらに属性を追加する自由が得られます。