2013-04-26 14 views
6

Büyük sorgu yapmaya çalışırken bu hatayı aldım.Büyük bir sorgu yaparken bellek yetersiz?

java.lang.OutOfMemoryError: Java heap space 

Aranan ve setAutoCommit (yanlış) ve setFetchSize benim hazırlanmış açıklamaya yöntemler uygulayarak büyük sorguyu ele yardımcı olabileceğini tespit ettik. Ancak, kullandığımda bu hatayı aldım.

java.sql.SQLException: Illegal value for setFetchDirection(). 

büyük sorguyu işlemek için uygun ve kolay yolu nedir?

SetFetchSize kullanmanın uygun yolu nedir?

+0

örnek kodla tavsiyelerde daha kolay olacağını içinde eriyor

ya da belki yerine dizisindeki çalıştırın. Bu tür bir şeye en sık rastlanan cevap, sorguyu daha yönetilebilir parçalara ayırmaktır. Bu verilere gerçekten ihtiyacınız var mı? –

+0

Aynı sorguyu çalıştırırken SQL 'konsolunda kaç tane satır var, aynı zamanda java – Akash

+0

olası çoğaltması için' heap_size'yi çoğaltmayı deneyin [MySQL ile büyük sonuç kümeleri oluşturuluyor] (http://stackoverflow.com/questions/ 2447324/akış-büyük-sonuç-setleri-ile-mysql) – RandomSeed

cevap

4

MySQL tarafından sağlanan Connector/J sürücüsünü kullanıyorsunuz varsayarsak, ben çözüm this manual page (ihbar parametresi Connection::createStatement() 1) bulunur inanıyoruz: Eğer satır Çok sayıda resultsets çalışıyorsanız

veya büyük değerler, ve gerekli bellek için JVM için yığın alanı ayıramazsınız, sürücüye sonuçları bir defada bir satır geri akışını bildirebilirsiniz. Kullanmak istediğinizde sadece kimliklerini falan sonra/Verilerinizi görüntülemek,

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, 
       java.sql.ResultSet.CONCUR_READ_ONLY); 
stmt.setFetchSize(Integer.MIN_VALUE); 
+0

Hazır bildirimi ile setFetchSize kullanmak mümkün mü? –

+0

"PreparedStatement public interface deyimini genişletiyor" olduğundan, sanırım öyle. Aynı şekilde, böyle bir 'PreparedStatement' oluşturmak için 'Connection :: prepareStatement (String sql, int resultSetType, int resultSetConcurrency)' yöntemini kullanmayı düşünürdüm. – RandomSeed

0

belki tembel arama yapmak örneğin çekin:

aşağıdaki şekilde bir Bildirimi örneği oluşturun, bu işlevselliği etkinleştirmek için Sadece bir ID üzerinde bir sorguyu perfrom? sadece söner ve arka

İlgili konular