здесь у меня есть блок кода, который будет вставлен в таблицу с именем Earnings и будет использовать подготовленные операторы для 4 целых чисел для каждой строки csv, добавлять их в пакет и выполнять пакет, когда все строки будут прочитаны. Почему это начинает вставлять в строке 2009 файла CSV, другими словами, он кажется нестабильным и будет импортировать только часть CSV в таблицу MySQL и как я мог бы сделать пакетное выполнение более эффективным с 6530 строк CSV? Также, как мне обработать подготовленный оператор, который не существует, скажем, что существует возможность наличия int в индексе параметра 4 подготовленного заявления или может быть пустым.
statement.executeUpdate("CREATE TABLE Earnings("
+ "tournament INT references Tournaments( tournament_id ), "
+ "player INT references Players( player_id ), "
+ "prize_money INT, "
+ "position INT, "
+ "PRIMARY KEY(tournament, player))");
Statement statement = conn.createStatement();
try{
String insertTableSQL2 = "INSERT INTO Earnings"
+ "(tournament, player, prize_money, position) VALUES"
+ "(?,?,?,?)";
PreparedStatement preparedStatement2 = conn.prepareStatement(insertTableSQL2);
BufferedReader reader2 = new BufferedReader(new FileReader("earnings.csv"));
String line = null; //line read from csv
Scanner scanner = null; //scanned line
while ((line = reader2.readLine()) != null) {
scanner = new Scanner(line);
scanner.useDelimiter(",");
while (scanner.hasNext()) {
String str = scanner.next();
preparedStatement2.setInt(1, Integer.parseInt(str));
String str2 = scanner.next();
preparedStatement2.setInt(2, Integer.parseInt(str2));
String str3 = scanner.next();
preparedStatement2.setInt(3, Integer.parseInt(str3));
String str4 = scanner.next();
preparedStatement2.setInt(4, Integer.parseInt(str4));
preparedStatement2.addBatch();
}
}
preparedStatement2.executeBatch();
preparedStatement2.close();
scanner.close();
reader2.close(); //closing CSV reader
}
catch(Exception e){
e.printStackTrace();
}
System.out.println("earnings.csv imported");
CSV форматируется как:
19367,26,677,1
19367,112,271,2
19372,51,134,1
19382,213,150,1
19382,243,50,2
18446,34,2976,1
18446,111,1082,2
19452,28,135,1