Всем привет. Пытаюсь загрузить большой файл (более 20 мб) в БД MySql вот кусок кода:
| Код | private void addNewFile(String name, File f) { try { FileInputStream fis = new FileInputStream(f); PreparedStatement stmt = connection.prepareStatement("Select * from `files`", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); stmt.execute(); ResultSet rs = stmt.getResultSet(); rs.moveToInsertRow(); Blob blob = rs.getBlob("data"); OutputStream os = blob.setBinaryStream(1); System.out.println("start load file: " + name); while (fis.available() > 0) {
int block_size = 1000000; if (fis.available() < 1000000) { block_size = fis.available(); } System.out.println("try read bytes: " + block_size); byte b [ ] = new byte[block_size]; fis.read(b); System.out.println("read ok, writing"); os.write(b); os.flush(); System.out.println("writing complite. check for next block..."); System.gc(); } System.out.println("loading file " + name + " complite."); os.close(); fis.close(); rs.updateBlob("data", blob); rs.updateString("name", name); rs.insertRow(); stmt.close();
} catch (Exception ex) { ex.printStackTrace(); } }
|
и вроде все как надо, файлы поменьше загружаются без проблем, но когда дело доходит до больших файлов, то JVM не хватает памяти. Вылетает:
| Цитата | Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
|
Впринципе, данных действительно не мало, но как то странно что больше (примерно) 20 метров уже загрузить нельзя.... чувствую, что ошибка-то десткая, но найти не получается... подскажите, как правильно большие данные загрузить в БД? |