問題に真っ直ぐ。 私は約50k-60k行を満たしています。 私はそのコンテンツをmysqlにアップロードする必要があります。通常はApacheのpoiを使用します読んで、それをmysqlにアップロードしてください。しかし、このファイルはApacheのpoiを使って読むことができません。なぜなら、ファイルが大量になってしまったからです。 誰かが私にその方法を教えてくれますか?ここでは、ApacheのPOIを使用してMySQLにコンテンツをアップロードするために私のサンプルコードはJava - XLSX解析とデータベースエクスポート
public static void uploadCrossSellCorpCard(FileItem file, String dbtable) {
System.out.println("UploadUtil Running" + file.getFileName().toString());
try {
for(int i = 0; i<=sheetx.getLastRowNum(); i++){
row = sheetx.getRow(i);
try{
int oc = (int) row.getCell(0).getNumericCellValue();
if((String.valueOf(oc).matches("[A-Za-z0-9]{3}"))){
String rm_name = row.getCell(1).getStringCellValue();
String company = row.getCell(2).getStringCellValue();
String product = row.getCell(3).getStringCellValue();
String detail = row.getCell(4).getStringCellValue();
String type = row.getCell(5).getStringCellValue();
String sql = "INSERT INTO " + dbtable + " VALUES('"
+ oc + "','" + rm_name + "','" + company + "','"
+ product + "','" + detail + "','" + type + "')";
save(sql);
System.out.println("Import rows " + i);
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (NullPointerException e) {
System.out.println(e);
}
}
System.out.println("Success import xlsx to mysql table");
} catch (NullPointerException e){
System.out.println(e);
System.out.println("Select the file first before uploading");
}
}
事前に感謝し、私の悪い英語のため申し訳ありません(それは1000年から2000年の行が含まれているいくつかの小さなのxlsxファイルに対して動作します)です:)
注:私は、ハンドルアップロードスキーマの休止方法を使用..「(SQL)を保存」私の休止方法
iは(CSVへのエクスポートそれとインポート以外の)Excelの問題を解決する方法を知らない、しかし、挿入のためにあなたは、BATCHUPDATEでPreparedStatementを使用する必要があります - あなたのpreparedStatement.addBatchを()各その行のPreparedStatement .clearBatch();数千行ごとに(これがメモリからDBにデータをプッシュします)。個々のインサートよりも無限に高速です。 – slipperyseal
私は挿入することについて何の問題もありません..既にhibernateで動作しています、それもPreparedStatementで動作します..今、私の問題はアップロードしたいと思っていますが、大きくてApacheのpoiを使うと読み込めません。 Javaのヒープサイズがまだ同じ問題があります。 – Diastowo
これをチェックしてください。ストリーミングAPIがあります... http://stackoverflow.com/questions/11891851/how-to-load-a-large-xlsx-file-with-apache-poi – slipperyseal