PDA

View Full Version : ResultSet و عدم توانایی در گرفتن حجم زیاد داده ها



vahid83
چهارشنبه 09 تیر 1389, 11:52 صبح
با عرض سلام خدمت دوستان گرامی جاوا کار

سؤالی داشتم که اگه ممکنه دست خالی برم نگردونید!:ناراحت:

جدولی دارم که log یه سری از تماسها رو ذخیره میکنه!

برای گزارش گیری از این تماسها اول اومدم از JTable استفاده کردم ولی برای تعداد رکوردهای بالای 50,000 تا دیگه هیچی نمایش نمی داد. بعد اومدم از jxl API استفاده کردم که اول این داده ها رو داخل فایل اکسل بریزه و بعد به تعداد دلخواه از فایل اکسل داخل JTable بریزه و نمایش بده. ولی این بار بدتر شد. رکوردهای بیشتر از 9,000 تا رو داخل فایل اکسل نمیریزه.
حالا در پی چاره ام!
چند تا امکان وجود داره:
1- مشکل بافر داشته باشم (که ResultSet یکیشه)
2- مشکل از jxl API باشه (خوب اگه اینطوریه پس چرا JTable هم همین مشکلو داره!)
3- مشکل از سرعت پایین connect به دیتابیسمه (از اونجا که ریموت وصل میشم.)
4-...

اگه مشکل از بافر ResultSet باشه لطفاً بهم بگید تا اصراری بر گرفتن حجم زیاد داده از دیتابیسم نداشته باشم!

بازم ممنونم که وقت گذاشتید و مشکلمو خوندید!:قلب:

vahid83
چهارشنبه 09 تیر 1389, 14:12 عصر
از بین دوستان اگه کسی چیزی میدونه و یا عقیده ای داره من خیلی مشتاق هستم که بدونم!

vahid83
پنج شنبه 10 تیر 1389, 11:18 صبح
باز هم سلام.

یعنی منو تحریم کردید!

آخه چرا کسی جواب منو نمیده؟:افسرده:

نکنه سؤالم خیلی بچه گانه است؟:گریه:

javaphantom
پنج شنبه 10 تیر 1389, 13:49 عصر
با عرض سلام خدمت دوستان گرامی جاوا کار

سؤالی داشتم که اگه ممکنه دست خالی برم نگردونید!:ناراحت:

جدولی دارم که log یه سری از تماسها رو ذخیره میکنه!

برای گزارش گیری از این تماسها اول اومدم از JTable استفاده کردم ولی برای تعداد رکوردهای بالای 50,000 تا دیگه هیچی نمایش نمی داد. بعد اومدم از jxl API استفاده کردم که اول این داده ها رو داخل فایل اکسل بریزه و بعد به تعداد دلخواه از فایل اکسل داخل JTable بریزه و نمایش بده. ولی این بار بدتر شد. رکوردهای بیشتر از 9,000 تا رو داخل فایل اکسل نمیریزه.
حالا در پی چاره ام!
چند تا امکان وجود داره:
1- مشکل بافر داشته باشم (که ResultSet یکیشه)
2- مشکل از jxl API باشه (خوب اگه اینطوریه پس چرا JTable هم همین مشکلو داره!)
3- مشکل از سرعت پایین connect به دیتابیسمه (از اونجا که ریموت وصل میشم.)
4-...

اگه مشکل از بافر ResultSet باشه لطفاً بهم بگید تا اصراری بر گرفتن حجم زیاد داده از دیتابیسم نداشته باشم!

بازم ممنونم که وقت گذاشتید و مشکلمو خوندید!:قلب:


شما هم برای statement و هم برای resultset تون می تونید fetch size تعریف کنید که مشکل overflow یا هر چیز دیگر توی قسمت خوندن با fetch کردن record های بالا نداشته باشید


ResultSet rs;
rs.setFetchSize(10000);

اگر بازم گیر کردی بگو

jeus
پنج شنبه 17 تیر 1389, 11:45 صبح
راه دیگه استفاده از limit در عبارت sql است


ٍٍُُSelect * from table limit [from],[count]


SELECT * from Table 10,100

از رکورد 10 به تعداد 100 رکورد نمایش میدهد

jeus
پنج شنبه 17 تیر 1389, 11:47 صبح
اگه خواستی بگو تا یه نمونه برای next page و previous page باست بذارم .

jeus
پنج شنبه 17 تیر 1389, 11:49 صبح
اگه خواستی بگو یه نمونه باسه صفحه قبل و بعد باست بذارم
البته نوشتنش ساده است اما اگه نتونستی بگو برات بگذارم

vahid83
دوشنبه 21 تیر 1389, 11:00 صبح
دوستان عزیز javaphantom (http://www.barnamenevis.org/forum/member.php?u=17370) و jeus (http://www.barnamenevis.org/forum/member.php?u=28990) از همرامیتون خیلی خیییییییییییییییییییییییی ییلی ممنونم.:بوس:
راهبردهای خوبی بود. دوست عزیز jeus (http://www.barnamenevis.org/forum/member.php?u=28990)، من برای رکوردهای قبلی و بعدی یه سری کد نوشتم ولی یه خورده مشکل داره، اگه براتون زحمتی نیست یه نمونه کد رو بذارید تا ببینم مشکل کارم کجاست.:قلب:
راستی فکر کنم استفاده از فایل متنی هم جواب بده! تست کردم میتونه 150000 رکورد رو در خودش ذخیره کنه!

jeus
یک شنبه 27 تیر 1389, 20:48 عصر
از اینکه دیر به این پست سر زدم عذر می خواهم

من فرض را بر این می گیرم که کار کردن با JDBC را بلدی و فقط طریقه ای که باید صفحه بعد و قبل را بری را می نویسم
اینو توی اکشن مورد نظر بگذار برای رفتن به فرم بعد


page++;
jLabel4.setText(page+"");
refresh();اینو توی اکشن مورد نظر بگذار برای رفتن به فرم قبل

page--;
jLabel4.setText(page+"");
refresh();متغییر page هم یک int که مقدار اولیه اش 0 است
حالا تنها کافیه که select خودتو اینجوری بسازی

private String getLimit()
{
count = Integer.parseInt(jSpinner1.getValue()+"");
limit = " LIMIT "+(page*count)+","+count;
return limit;
}همونجور که فهمیدی تعداد result ها رو هم می تونی با count مدیریت کنی
اخرش هم این تابع را بعد از عبارت select قرار می دی

"SELECT * from table Where " +getLimit() موفق باشی