Merhaba,

ResultSet de bulunan sorgu sonucunda gelen verilerin kaç satır olduğunu aşağıdaki kod ile alabiliyorum ama bu performansta ciddi şekilde yavaşlığa neden oluyor bu işlemin daha hızlı bir yolu varmıdır?

            results.last();
            if (results != null) {
                kayitSayisi = results.getRow();
            }
            results.beforeFirst();

soruldu: 28 Nis '13, 08:44

gokhanakgol's gravatar image

gokhanakgol
705687777
cevap kabul oranı: 30%

değiştirildi: 28 Nis '13, 11:04

MDemir's gravatar image

MDemir
2.1k173445

server'dan datayı hızlı almak için db'ye gitmek yerine, cache üzerinden almanız çok daha performanslı olacaktır. her seferinde db'ye hit etmek demek zaten fazlasıyla performanstan ödün vermektir.

(30 Mar '15, 17:28) Turgay Can Turgay%20Can's gravatar image

resultSet = statement.executeQuery("SELECT count(indexed_kayit_adi) as record_count FROM tabl_oadi");
if resultSet.first() {
 int record_count = resultSet.getInt("record_count");
}

Bundan daha hizlisi olmaz :)

permanent link

cevaplandı: 29 Nis '13, 01:12

Fatih's gravatar image

Fatih
51761021
cevap kabul oranı: 40%

değiştirildi: 29 Nis '13, 01:13

Bu şekilde ResultSet 'deki kayıt sayısını okumuş olmuyorsunuz veri tabanından dönen count değerine ulaşmış oluyorsunuz.Benim istediğim örneğin ; Siparişler tablosundan aktif olanları çektik ve ResultSet 'e aldık işte o anda ResultSet'e gelen değerde kaç satır var ona ulaşmak istiyorum en hızlı yolla

(29 Nis '13, 09:28) gokhanakgol gokhanakgol's gravatar image

Bunu deneyebilir misin?

statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

İlgilenebileceğin kaynak: Best practices to improve performance in JDBC

permanent link

cevaplandı: 28 Nis '13, 11:22

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%

query = "select *from tablon";
statement = baglantiAdresi.createStatement
(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
results = statement.executeQuery(query);
results.last(); // son kayıda gitti
int rowNumber = result.getRow(); //son kayıtta olduğu için  oranın satı numarasını aldın
results.first(); // deyip tekrar listenin başına yolladın

Umarım yardımcı olur

permanent link

cevaplandı: 30 Nis '13, 05:08

Hasan%20Bey's gravatar image

Hasan Bey
342202532
cevap kabul oranı: 0%

Hasan Bey,

Benim ilk yazdığımı okumadınız galiba bende bu kod'un aynısını paylaştım zaten bu şekilde yapabiliyorum diye yazdım ben daha performanslı nasıl ulaşabilirim diye sormuştum.Bu şekil yavaşlığa sebep oluyor

(30 Nis '13, 05:31) gokhanakgol gokhanakgol's gravatar image
1

Gökhan bey yukasrıdaki kodun isinkinden iki farkı var.

  1. Scroll olaylarını tetiklemiyor olması,

  2. Read Only query olması. Yani tek yönlü veri alışverişi.

Bu iki parametre önemli performans artışı sağlar. Veriyi ve kayıt sayısını aynı anda çekmek istiyorsanız yapacağınız en hızlı yöntem bu olur. İkinci yol. Benim verdiğim cevapta sizin where deyimini ekleyerek kayıt sayısını öğrenip sonra bu sorguyu çalıştırıp veriyi çekmek olacaktır. Delphide olsa idi RecordCountFromSrv diye bir metod var idi hızlıca öğrenmek öğrenmek için ama burada yok malesef.

(30 Nis '13, 05:48) Fatih Fatih's gravatar image

evet sorguda where olursa kat kat dahada hızlanır

(30 Nis '13, 09:07) Hasan Bey Hasan%20Bey's gravatar image

Sayfadaki tüm yorumları ve cevapları okudum. Anlatmak istediğini tam olarak ifade etmemişsin. Amacını anlamak için bir kaç sorum var ve cevabım var.

1.Soru: İstediğin sorguyu çalıştırdın ve amacın sadece sorgundan kaç tane kayıt geldiğini öğrenmek mi? Cevap: Sorgunu "Select count(*)..." şeklinde yaz. Bunun için resultSet'ten kaç kayıt olduğunu anlamaya değmez.

  1. Soru: Belirli bir amaç için sorgunu hazırladın. Buradan gelecek kayıtları kullanacaksın. Ama aynı zamanda sorgundan kaç tane kayıt geldiğini de öğrenmek istiyorsun. Nasıl öğrenebilirim? Cevap: Bu kayıtları illa ki başka bir nesneye taşıyorsundur. Örneğin ArrayList'e veya benzer bir List'e koyduğunu düşünüyorum. Kayıt sayısını öğrenmeyi verileri listene aldıktan List.siz() metodu ile öğrenebilirsin.

Eğer yukarıdaki iki durum senin yaşadığın durumdan farklı ise tam olarak ne yapmak istediğini belirtirsen sana yardımcı olabiliriz.

permanent link

cevaplandı: 27 Mar '15, 12:41

UgurYasar's gravatar image

UgurYasar
18114
cevap kabul oranı: 40%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×2

Soruldu: 28 Nis '13, 08:44

Görüntüleme: 1,002 kez

Son güncelleme: 30 Mar '15, 17:28

powered by BitNami OSQA