View Full Version : اشکال در کد زیر فوری
yegane8
شنبه 10 تیر 1391, 21:25 عصر
سلام
من میخوام این کود از database به تعداد ستونهای جدول رکوردها رو نمایش بده اول در textfeild نمایش میداد اما حالا میخوام تغییرش بدم تا در جدول نمایش بده لطفا کمک کنید
ResultSet rs;
rs =st.executeQuery(sql);
JTable ta1;
ta1= new javax.swing.JTable();
ta1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null,null},
{null, null,null},
{null, null,null},
{null, null,null},
{null,null,null},
{null,null,null},
{null,null,null},
{null,null,null}
},
new String [] {
"Title 1", "Title 2","Title3"
}
));
مشکل در این قسمته
if(rs.next())
{
t.setText(rs.getString("FirstName"));
t1.setText(rs.getString("LastName"));
t2.setText(rs.getString("Age"));
}
t,t1,t2 قبلا اسم textfeild ها بودن و الان اسم جدول ta1
این قسمت اخرم که توش اشکال دارم actionlistener کلید next هست که من می خوام با زدن این دکمه record های بعدی در جدول نمایش داده شود
yegane8
شنبه 10 تیر 1391, 22:22 عصر
یه سوال دیگه اگه بخواهم با textfeild بیشتر از یک Record مثلا 5 record را نمایش بدهم و با زدن دکمه next پنج record بعدی نمایش داده شوند باید چه کنم؟؟؟
spiderman200700
شنبه 10 تیر 1391, 23:54 عصر
سلام
با این کد میتونی تعداد ستون های جدولت رو به دست بیاری.
int column=rs.getMetaData().getColumnCount();
بعد باید یه آرایه 2D به تعداد ستون های جدولت و هر تعداد سطری که میخوای بسازی.
spiderman200700
یک شنبه 11 تیر 1391, 00:02 صبح
یه سوال دیگه اگه بخواهم با textfeild بیشتر از یک Record مثلا 5 record را نمایش بدهم و با زدن دکمه next پنج record بعدی نمایش داده شوند باید چه کنم؟؟؟
اگه برای هر رکوردتون 3 تا TextField داشته باشید. یعنی برای هر فیلد دیتابیستون یه TextField ،پس باید در کل برای 5 رکورد، 15تا TextField داشته باشی.
هر دفعه با زدن next اصلاعات TextFieldها پاک میشه و اطلاعات رکورد های جدید رو داخلشون قرار میدی.
البته کار معقولی به نظر نمیاد. بهتره از JTable استفاده کنی.
yegane8
یک شنبه 11 تیر 1391, 14:22 عصر
سلام
با این کد میتونی تعداد ستون های جدولت رو به دست بیاری.
int column=rs.getMetaData().getColumnCount();
بعد باید یه آرایه 2D به تعداد ستون های جدولت و هر تعداد سطری که میخوای بسازی.
ممنون اما من مشکلم در به دست اوردن تعداد ستون های جدول نیست مشکل من اینکه نمی دونم چطوری باید اطلاعات رو تو جدول نمایش بدهم
spiderman200700
یک شنبه 11 تیر 1391, 15:26 عصر
برای یادگیری کار با JTable از لینک زیر استفاده کنید:
http://java.tadbirpoya.ir/articles/JAVA%20SE/JTable.htm
yegane8
یک شنبه 11 تیر 1391, 18:04 عصر
برای یادگیری کار با JTable از لینک زیر استفاده کنید:
http://java.tadbirpoya.ir/articles/JAVA%20SE/JTable.htm
من برای مشکلو این قسمت رو try{
rs.next();
rs.getRow();
t.setText(rs.getString("FirstName"));
t1.setText(rs.getString("LastName"));
t2.setText(rs.getString("Age"));
}catch(Exception ex){
}
با این قسمت جایگزین کردم
final DefaultTableModel model= new DefaultTableModel(null,columnName);
try {
while (rs.next()) {
model.insertRow(ta1.getRowCount(),new Object[]
{
rs.getString(1),
rs.getString(2),
rs.getString(3),
});
}
}
catch(SQLException sqlEx)
{
System.out.println("* SQL error! *");
System.exit(1);
}
}
ولی error داره خط اول و اصلا نمی دونم معنی خط اول چیه؟
این خط هم error داره و هم نمی فهمم model.insertRow(ta1.getRowCount(),new Object
لطفا راهنمایی کنید
:(
spiderman200700
یک شنبه 11 تیر 1391, 19:17 عصر
چه خطایی میده؟
کل خطا رو اینجا قرار بدید تا ببینم.
yegane8
یک شنبه 11 تیر 1391, 21:06 عصر
چه خطایی میده؟
کل خطا رو اینجا قرار بدید تا ببینم.
ّبخشید این اصلا درست هست واسه اینکه data ها در table ta1 به نمایش در بیاد
خطا :
final DefaultTableModel model= new DefaultTableModel(null,"FirstName");
اسم یکی از ستون هام در دیتابیس FirstName است
error:
no suitable constructor found for DefaltTableModel (<nulltaype>.java.lang.String)
ادامه هم داشت خیلی طولانی بود اگه لازمه بگید بذارم
خطا 2: cannot found getRowCount() method
spiderman200700
یک شنبه 11 تیر 1391, 22:02 عصر
در مورد خطی که گفتید نمیفهمید چیه:
JTable از کلاس انتزاعیه AbstractTableModel برای مدیریت نمایش اطلاعات به صورت جدول استفاده می کنه. ما میتونیم متد های کلاس AbstractTableModel رو خودمون پیاده سازی کنیم( که توی اون لینکی که بهتون دادم در قسمت ساخت مدلی از جدول توضیح داده چطور این کار رو کنید) ، یا میتونیم از DefaultTableModel استفاده کنیم که این کلاس از AbstractTableModel ارث میبره و متد های این کلاس رو به صورت ساده و پیشفرض پیاده سازی کرده.
متد های کلاس AbstractTableModel ، برای حذف ،اضافه ،بروز رسانی سطر ها و ستون های جدول و ... استفاده میشه.
پس DefaultTableModel نمونه ی ساده ای از پیاده سازی کلاس AbstractTableModel هست.
البته اگه خودتون AbstractTableModel رو ارث ببرید و متد هاش رو پیاده سازی کنید خیلی راحتتر و وسیع تر میتونید جدول رو کنترل کنید.
موفق باشید
yegane8
دوشنبه 12 تیر 1391, 00:17 صبح
سلام ممنون
باید چی کار کنم تا اطلاعات به همون ترتیب که تو database هست در جدول نمایش داده بشود و چطوری باید عرض یکی از ستون های جدول رو بیشتر کنم و چطوری باید تعداد محدودتر از اطلاعات رو در جدول نمایش بدهم
مثلا فرض کنید ستون 5th همان count باشد که داده ها را میشمارد من try{} رو که اطلاعات رو از database در جدول نمایش میداد رو در یک while به صورت زیر گداشتم اما دیگر چیزی در جدول نمایش داده نشد
while(rs.getInt<5){
try{
.
.
.
}
}//end of while
spiderman200700
دوشنبه 12 تیر 1391, 01:11 صبح
چطوری باید تعداد محدودتر از اطلاعات رو در جدول نمایش بدهم
مثلا فرض کنید ستون 5th همان count باشد که داده ها را میشمارد من try{} رو که اطلاعات رو از database در جدول نمایش میداد رو در یک while به صورت زیر گداشتم اما دیگر چیزی در جدول نمایش داده نشد
while(rs.getInt<5){
try{
.
.
.
}
}//end of while
سلام. خواهش میکنم.
این کد کاملا اشتباهه :متفکر:
از این استفاده کنید:
int count=0;
try{
rs =st.executeQuery("select * from Table1 where ID between " + count + " and " + (count+5) ); //if ID is started from 0
while(rs.next()){
.
.
.
}
}
همونطور که میبینید مهمترین چیز query مربوط به دیتابیس هست.
در اینجا اگه ResultSet رو به صور کامل پیمایش کنید، تمام 5تا سطر انتخاب شده از دیتابیس با همون ترتیب وارد JTable میشن.
برای عوض کردن عرض ستون:
فرض کن میخوای عرض ستون دوم رو به 100 پیکسل تغییر بدی(ستون دوم=3) :
table.getColumnModel().getColumn(3).setPreferredWi dth(100);
yegane8
دوشنبه 12 تیر 1391, 01:35 صبح
سلام. خواهش میکنم.
این کد کاملا اشتباهه :متفکر:
از این استفاده کنید:
int count=0;
try{
rs =st.executeQuery("select * from Table1 where ID between " + count + " and " + (count+5) ); //if ID is started from 0
while(rs.next()){
.
.
.
}
}
همونطور که میبینید مهمترین چیز query مربوط به دیتابیس هست.
در اینجا اگه ResultSet رو به صور کامل پیمایش کنید، تمام 5تا سطر انتخاب شده از دیتابیس با همون ترتیب وارد JTable میشن.
برای عوض کردن عرض ستون:
فرض کن میخوای عرض ستون دوم رو به 100 پیکسل تغییر بدی(ستون دوم=3) :
table.getColumnModel().getColumn(3).setPreferredWi dth(100);
مرسی 2 اشکال قبلی رفع شد
در اینجا اگه ResultSet رو به صور کامل پیمایش کنید
میشه بیشتر توضیح بدین
خیلی ممنون
yegane8
دوشنبه 12 تیر 1391, 02:01 صبح
یک سوال دیگر
چرا وقتی تو database فارسی تایپ میکنم تو جدولم به جای حرف فارسی ؟ چاپ میشه برای حل این مشکل چه کنم ؟
با تشکر
spiderman200700
دوشنبه 12 تیر 1391, 09:12 صبح
منظورم از پیمایش کامل این بود که حلقه ی while رو تا انتها ادامه بدید و وسطهاش به هر دلیلی حلقه رو نشکنید. یعنی تا وقتی که rs.next() برابر true هست حلقه ادامه پیدا کنه. که در حالت عادیش همینطوریه و مشکلی هم نیست.
spiderman200700
دوشنبه 12 تیر 1391, 09:17 صبح
یک سوال دیگر
چرا وقتی تو database فارسی تایپ میکنم تو جدولم به جای حرف فارسی ؟ چاپ میشه برای حل این مشکل چه کنم ؟
با تشکر
از چه دیتابیسی استفاده می کنید؟
yegane8
دوشنبه 12 تیر 1391, 12:07 عصر
از چه دیتابیسی استفاده می کنید؟
از دیتابیس access
yegane8
دوشنبه 12 تیر 1391, 12:09 عصر
منظورم از پیمایش کامل این بود که حلقه ی while رو تا انتها ادامه بدید و وسطهاش به هر دلیلی حلقه رو نشکنید. یعنی تا وقتی که rs.next() برابر true هست حلقه ادامه پیدا کنه. که در حالت عادیش همینطوریه و مشکلی هم نیست.
حلقه while در برنامه تا انتها ادامه پیدا میکند و نمی شکند
while(rs.next())
{
.
.
}
spiderman200700
دوشنبه 12 تیر 1391, 13:11 عصر
بله.
این حلقه فقط در دوصورت میشکنه و به اتمام میرسه
یکی اینکه rs.next() برابر false بشه و یکی دیگه اینکه داخل حلقه به دستور break برسیم.
البته در شرایطی دستور goto هم میتونه حلقه رو بشکنه
yegane8
دوشنبه 12 تیر 1391, 14:15 عصر
int count=0;
try{
rs =st.executeQuery("select * from Table1 where ID between " + count + " and " + (count+5) ); //if ID is started from 0
while(rs.next()){
.
.
.
}
}
سلام
حالا اگه بخواهم 20 تا از لغاتی که تو database فیلد مثلا state شون 0 است رو نمایش بدهم باید چه کنم اینطوری دیگه نمیشه از count استفاده کرد چون ممکنه 20 تای اول همهstate!=0 باشه یا حالت های دیگر ...:متفکر:
spiderman200700
دوشنبه 12 تیر 1391, 16:35 عصر
برای انتخاب 20 لغت از دیتابیس که stateشون 0 باشه.باید از این query استفاده کنید:
rs =st.executeQuery("select top 20 * from Table1 where state=0" );
yegane8
سه شنبه 13 تیر 1391, 01:35 صبح
سلام
چطوری میشه اطلاعاتی رو که از database در جدول به نمایش در میاند رو 20 تا 20 تا جلو برد در actionListener کلید next باید چی بنویسم؟
spiderman200700
پنج شنبه 15 تیر 1391, 01:41 صبح
دوتا راه دارید:
1- تعداد کلماتی که نیاز دارید رو از دیتابیس بخونبد و توی یه آرایه ذخیره کنید هر دفعه با زدن دکمه ی next بیستای بعدی رو از آرایه به کاربر نشون بدید.
2- با Query قبلی که بهتون دادم 20تا لغت از دیتابیس بگیرید و به کاربر نشون بدید وقتی کاربر به این 20لغت جواب داد و توی دیتابیس جواب ذخیره شد با همین روش 20تای بعدی رو از دیتابیس بگیرید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.