前回の続きです。
raceIDからレースデータを取得し、レース結果のリストと結合させました。
ArrayList<String>同士であればaddAll、ArrayList<String>に要素を追加する場合はaddを用います。
次の第4メソッドでは得られたリストをCSVファイルにします。
<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();
ArrayList<ArrayList<String>> raceList = raceSearch(ID);
ArrayList<ArrayList<String>> raceListCon = raceSearch2(raceList);
toCSV(raceListCon);}
<第1メソッド、第2メソッドは省略>
// 第3メソッド
public static ArrayList<ArrayList<String>> raceSearch2(ArrayList<ArrayList<String>> raceList) {
System.out.println("第3メソッド内出力 " + raceList);
ArrayList<String> raceIDList = new ArrayList<String>();
for (int i = 0;i < raceList.size();i++){
ArrayList<String> raceListChild = raceList.get(i);
String raceID = raceListChild.get(12);
raceIDList.add(raceID);}
System.out.println(raceIDList);
ArrayList<ArrayList<String>> raceList2 = new ArrayList<ArrayList<String>>();
List<String> columnNameList = new ArrayList<String>();
Integer count = 1;
for (String raceID :raceIDList){
String table = raceID.substring(1,7);
try (Connection conn = DriverManager.getConnection(url, user, password)){
String sql = String.format("SELECT 日付,開催,レース,レース名,コース,天候,馬場状態 FROM horse_race_name.race_n_%s WHERE raceID = '%s'",table,raceID);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
int i = 1;
if (count == 1){
while(i <= columnCount) {
columnNameList.add(rsmd.getColumnName(i++));}}
count = count + 1;
while (rs.next()) {
ArrayList<String> raceResultList = new ArrayList<String>();
int i2 = 1;
while(i2 <= columnCount) {
raceResultList.add(rs.getString(i2++));}
System.out.println(raceResultList);
raceList2.add(raceResultList);}}
catch (Exception e) {
e.printStackTrace();}}
System.out.println(columnNameList);
System.out.println(raceList2);
ArrayList<ArrayList<String>> raceListCon = new ArrayList<ArrayList<String>>();
for (int i = 0;i < raceList.size();i++){
ArrayList<String> raceListChild = raceList.get(i);
ArrayList<String> raceListChild2 = raceList2.get(i);
System.out.println(raceListChild);
System.out.println(raceListChild2);
raceListChild2.addAll(raceListChild);
System.out.println(raceListChild2);
raceListCon.add(raceListChild2);}
System.out.println(raceListCon);
return raceListCon;}
// 第4メソッド
public static void toCSV(ArrayList<ArrayList<String>> raceListCon) {
System.out.println("第4メソッド内出力 " + raceListCon);}}
--------------------------------------------------
出力
--------------------------------------------------
競走馬名を入力してください
シャフリヤール
<中略>
第4メソッド内出力 [[2020-10-25, 4回京都6日目, 5 R, 2歳新馬, 芝右 外1800m, 天候 : 晴, 芝 : 良, 1, 7, 13, 55.0, 福永祐一, 1:49.9, 6-4, 34.6, 2.3, 1, 450(0), 700.0, r202008040605], [2021-02-14, 1回東京6日目, 11 R, 第55回共同通信杯(G3), 芝左1800m, 天候 : 晴, 芝 : 良, 3, 8, 11, 56.0, 福永祐一, 1:48.0, 7-8-8, 33.4, 4.9, 2, 448(-2), 956.1, r202105010611], [2021-03-27, 2回阪神1日目, 11 R, 第68回毎日杯(G3), 芝右 外1800m, 天候 : 晴, 芝 : 良, 1, 6, 6, 56.0, 川田将雅, 1:43.9, 4-4, 34.1, 2.9, 2, 448(0), 3,833.6, r202109020111]]