У меня есть программа, которая извлекает данные из SQL-запроса с возможностью создания и записи искомых данных в файл Excel. Эта программа может извлекать данные из нескольких запросов и отправляет эти данные в файл Excel для всех из них, кроме одного. Тот, который вызывает у меня проблемы, извлекает около 350 результатов из своего запроса, что является наибольшей суммой, запрошенной запросом. Когда я создаю файл Excel в Eclipse, он просто создает один файл Excel, как и предполагалось. Если я превращу программу в файл JAR и создаю файл Excel, используя тот же запрос, файл Excel разбивается на 5 различных файлов Excel, каждый из которых содержит примерно 50-60 результатов.
Я использовал тот же базовый код для других запросов SQL, и он работал нормально, это первый раз, когда я сталкиваюсь с этой конкретной проблемой.
Это мой файл для записи в файл Excel. Данные, полученные в результате поиска SQL, хранятся в 13 различных списках, по одному списку для каждого столбца в поиске SQL. Код берет сегодняшнюю дату и время и добавляет его в заголовок файла. tableMade получает значение false при первом создании файла Excel, так как первое, что добавляется в файлы Excel, - это имена столбцов. Если для этого параметра не установлено значение false, writeToExcel будет добавлять имена столбцов каждый раз, когда добавляет данные в файл Excel.
public static void writeToExcel(String a, String b, String c, String d,
String e, String f, String g, String h, String i,
String j, String k, String l, String m){
try{//sends data from toExcel to an excel file
Date date2 = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String strDate = dateFormat.format(date2);//above creates title date/time
String fileName = "Date "+ strDate + ".csv";//creates title: Data_For_yyyy_MM_dd_HH_mm_SS
FileOutputStream fos = new FileOutputStream(fileName,true);//creates new excel file
PrintWriter pw = new PrintWriter(fos);
if(tableMade == false){
pw.println(a + "," + b + "," +c+ "," +d+ "," +e
+ "," +f+ "," +g+ "," +h+ "," +i+ "," +j+ "," +k+ "," +l+"'"+m+ "\t");
tableMade = true;//writes to excel file
}
pw.println(a + "," + b + "," +c+ "," +d+ "," +e
+ "," +f+ "," +g+ "," +h+ "," +i+ "," +j+ "," +k+ "," +l+"'"+m+ "\t");
pw.close();
System.out.println(fileName + " was created");
}
catch(FileNotFoundException ex){
System.out.println("Write to excel failed");
}
}
Это код кнопки, которая вызывает writeToExcel. При нажатии запускается этот код, который создает файл Excel. Код выполняет итерацию по каждому из 13 списков одновременно, передавая значение, на которое в данный момент указывается значение в каждом списке, в качестве аргументов для writeToExcel.
for(int i = 0; i < list1.size(); i++) {
writeToExcel(list1.get(i), list2.get(i), list3.get(i), list4.get(i), list5.get(i),
list6.get(i), list7.get(i), list8.get(i), list9.get(i), list10.get(i), list11.get(i),
list12.get(i), list13.get(i));
}
excelAllowed = false;
tableMade = false;
}
Ожидаемый результат - 1 файл Excel, содержащий всю запрашиваемую дату, однако фактический вывод при запуске из файла JAR - 5-6 файлов Excel, каждый из которых содержит часть данных.