====== JDBC テンプレートでレコードを取得して使う ======
params = mapOf (
"A" to "a"
"B" to "b"
)
jdbcTemplate.queryForStream(getSql(), params) { rs, _ ->
val rowData = mutableListOf>() // キーと値のペアを格納するリストを作成
// クエリ結果のメタデータを使用して各カラムのデータをマッピング
for (i in 1..rs.metaData.columnCount) {
// getColumnLabel(i) でカラムのラベル(名前)を取得し、getObject(i) で値を取得
rowData.add(rs.metaData.getColumnLabel(i) to rs.getObject(i))
}
rowData // 1行のデータをキーと値のペアのリストとして返す
}.use { stream ->
// クエリの結果ストリームを完了させるために、useを使用してストリームを消費する
stream.forEach { row ->
val id = row.firstOrNull { it.first == "id" }?.second
val name = row.firstOrNull { it.first == "name" }?.second
// 他のカラムを適宜参照
// ここで得られたデータを処理する
processRowData(id, name)
}
}
ここで、firstOrNullはコレクション(リストや配列など)から最初に条件を満たす要素を取得する関数です。条件を満たす要素が見つからない場合はnullを返します。
.firstと.secondは**Pair**クラスのメソッドで、キーと値のペアからそれぞれキーまたは値を取得するために使用される。
// Pair の first と second の使用例
val pair: Pair = data.first()
val key: String = pair.first // キーを取得
val value: Any? = pair.second // 値を取得