データベースフィールドの値を使用してリストを作成したいと思います。名前と名前の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 を作成する必要があります。そして、それをすべてからインスタンス化し、namesurnamename(FullName)namesurnameResultSetList<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文字列フィールドと. これらを使用してループに入力するだけですnamesurname
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により、今後さらに属性を追加する自由が得られます。