Я написал код для импорта .xls и сохранения данных в БД. Он отлично работает для небольшого количества данных, то есть несколько сотен строк Excel Но если в .xls есть, скажем, 5000 строк, то импорт и сохранение занимает около 1,5–2 минут. Вот фрагмент кода:
sql = new StringBuffer("insert into bookdetails(bookno");
for (int i = 0; i < header.length; i++) sql.append("," + header[i]);
sql.append(") values(?");
for (int i = 0; i < header.length; i++) sql.append(",?");
sql.append(")");
System.out.println(sql);
psmt = con.prepareStatement(sql.toString());
columnCount = s.getColumns();
// Reading Individual Row Content
for (int i = 1; i < rowCount; i++) {
// Get Individual Row
auto =
getAutoIncrement(
con,
"bookdetails"); // getAutoIncrement() just increments the value(as the name suggests).
psmt.setString(1, auto);
// s is sheet
if (s.getCell(0, 0).getContents().length() != 0) {
for (int j = 0; j < columnCount; j++) {
rowData = s.getCell(j, i).getContents();
System.out.println(
"Header====" + header[j] + "==rowData[j]==" + rowData + "==i==" + i + "==j==" + j);
// let's say our excel has 4 columns[sno, hello, asd, column]
if (header[j].equalsIgnoreCase("sno")) {
psmt.setString(2, rowData);
} else if (header[j].equalsIgnoreCase("hello")) {
psmt.setString(3, rowData);
} else if (header[j].equalsIgnoreCase("asd")) {
psmt.setString(4, rowData);
} else if (header[j].equalsIgnoreCase("column")) {
psmt.setString(5, rowData);
}
}
psmt.addBatch();
psmt.executeBatch();
}
}
Какие меры я могу предпринять, чтобы ускорить это хранение.
Могу ли я временно временно сохранить лист .xls вместо построчного строка (которая занимает много времени). Любые предложения приветствуются.