2012-04-10 13 views
11

Veritabanı yürütmelerden döndürülen bir imleç 31ms (milisaniye) cinsinden var.ResultSet - İmleç: rs.next() Çok zaman alarak

Ama imlecin her satır den fazla 40 saniye (40000 ms)

ne olabilir alıyor yoluyla getirilirken satırlar için

ResultSet rs = (ResultSet)cstm.getObject(6); 

    while(rs.next()){ 
    system.out.println("..."); 
    } 

Sadece basit transversing 1500'den fazla satır olan bu imleci kullandığınızda bitti mi?

cevap

16

Nitekim, sen

Eğer gereken tek şey yapmak ... sonraki kayıtlar için veritabanı tam 150 kez aradı örneğin için fetchSize ayarlayarak .. 100 performansını test etmektir:

statement.setFetchSize(100); 

Bu sayı ile oynayabilir sizin ortam yaratmak göre performansını artırmak için.

+0

Teşekkürler çalıştı ... Ben ResultSet.setFetchSize (100) kullanıyorum ... – faraz

+0

Harika :) 100 iyi olmalı evet – Mik378

+0

Teşekkürler Mik378, sen benim gün yaptın ... !!! –

4

Eğer imleç 1500'den fazla satır ve veritabanı tarafından döndürülen ne o imleç sadece referanstır rs var. Bu nedenle, rs.next()'u çağırdığınızda, her seferinde veritabanına gider ve imleç işaretçisi tarafından işaret edilen geçerli kaydı alırsınız.

Açıkçası, her seferinde veritabanına gitmenin ve her yinelemeli döngü yinelemede 1500'den fazla kez tek bir kayıt almanın biraz zaman alacaktır. Varsayılan JDBC Eğer daha büyük bir değere ayarlanmış yoksa bir, Böylece 10 boyutunu getirme kullanmak tarafından

+0

Güzel açıklama. – Deepak