前回の続きです。
第2メソッドはリストを戻り値にして第3メソッドに渡しました。第3メソッドでも新たにリストを作成しますが、JavaではPythonのように戻り値を複数にできないので第3メソッド内で結合させるつもりです。
また変数名をJavaのルールに従って単語を直接連結かつ先頭語以外は大文字で始まるようにしました。Pythonでは全て小文字かつアンダーバー(アンダースコア)で連結します。
<importは省略>
public class AppTest {
static String url = "jdbc:mysql://localhost:3306";
static String user = "ユーザ名";
static String password = "パスワード";
public static void main(String args[]) {
String ID = IDSearch();
List<String> raceList = raceSearch(ID);
raceSearch2(raceList);}
<第1メソッドは省略>
// 第2メソッド
public static List<String> raceSearch(String ID) {
System.out.println("第2メソッド内出力 " + ID);
String birthYear = ID.substring(0,4);
Integer birthYearInt = Integer.parseInt(birthYear);
Integer startYear = birthYearInt + 2;
String startYearStr = startYear.toString();
System.out.println("最速デビュー年 " + startYear);
ArrayList<String> raceList = new ArrayList<String>();
List<String> columnList = new ArrayList<String>();
List<String> columnNameList = new ArrayList<String>();
int count = 1; // カラム名取得用
for (int i = startYear; i < 2022; i++){
System.out.println("検索年 " + i);
try (Connection conn = DriverManager.getConnection(url, user, password)){
String sql = String.format("SELECT 着順,枠番,馬番,斤量,騎手,タイム,通過,上り,単勝,人気,馬体重,賞金,raceID FROM horse_race_result.race_r_%d WHERE horseID = %s",i,ID);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
int i2 = 1;
if (count == 1){
while(i2 <= columnCount) {
columnNameList.add(rsmd.getColumnName(i2++));}}
count = count + 1;
while (rs.next()) {
ArrayList<String> raceResultList = new ArrayList<>(columnCount);
int i3 = 1;
while(i3 <= columnCount) {
raceResultList.add(rs.getString(i3++));}
System.out.println(raceResultList);
raceList.add("[" + raceResultList + "]");}}
catch (Exception e) {
e.printStackTrace();}}
System.out.println(columnNameList);
System.out.println(raceList);
// カラム名のリストを先頭に結合
raceList.add(0,"[" + columnNameList + "]");
System.out.println(raceList);
System.out.println("出走数 " + (raceList.size()-1));
return raceList;}
// 第3メソッド
public static void raceSearch2(List<String> raceList) {
System.out.println("第3メソッド内出力 " + raceList);}}
--------------------------------------------------
出力
--------------------------------------------------
該当馬のIDは201805165です
mainメソッド出力 201805165
第2メソッド内出力 201805165
最速デビュー年 2020
検索年 2020
[1, 7, 13, 55.0, 福永祐一, 1:49.9, 6-4, 34.6, 2.3, 1, 450(0), 700.0, r202008040605]
検索年 2021
[3, 8, 11, 56.0, 福永祐一, 1:48.0, 7-8-8, 33.4, 4.9, 2, 448(-2), 956.1, r202105010611]
[1, 6, 6, 56.0, 川田将雅, 1:43.9, 4-4, 34.1, 2.9, 2, 448(0), 3,833.6, r202109020111]
[着順, 枠番, 馬番, 斤量, 騎手, タイム, 通過, 上り, 単勝, 人気, 馬体重, 賞金, raceID]
[[[1, 7, 13, 55.0, 福永祐一, 1:49.9, 6-4, 34.6, 2.3, 1, 450(0), 700.0, r202008040605]], [[3, 8, 11, 56.0, 福永祐一, 1:48.0, 7-8-8, 33.4, 4.9, 2, 448(-2), 956.1, r202105010611]], [[1, 6, 6, 56.0, 川田将雅, 1:43.9, 4-4, 34.1, 2.9, 2, 448(0), 3,833.6, r202109020111]]]
[[[着順, 枠番, 馬番, 斤量, 騎手, タイム, 通過, 上り, 単勝, 人気, 馬体重, 賞金, raceID]], [[1, 7, 13, 55.0, 福永祐一, 1:49.9, 6-4, 34.6, 2.3, 1, 450(0), 700.0, r202008040605]], [[3, 8, 11, 56.0, 福永祐一, 1:48.0, 7-8-8, 33.4, 4.9, 2, 448(-2), 956.1, r202105010611]], [[1, 6, 6, 56.0, 川田将雅, 1:43.9, 4-4, 34.1, 2.9, 2, 448(0), 3,833.6, r202109020111]]]
出走数 3
第3メソッド内出力 [[[着順, 枠番, 馬番, 斤量, 騎手, タイム, 通過, 上り, 単勝, 人気, 馬体重, 賞金, raceID]], [[1, 7, 13, 55.0, 福永祐一, 1:49.9, 6-4, 34.6, 2.3, 1, 450(0), 700.0, r202008040605]], [[3, 8, 11, 56.0, 福永祐一, 1:48.0, 7-8-8, 33.4, 4.9, 2, 448(-2), 956.1, r202105010611]], [[1, 6, 6, 56.0, 川田将雅, 1:43.9, 4-4, 34.1, 2.9, 2, 448(0), 3,833.6, r202109020111]]]