PDA

View Full Version : مشکل در listview



AbdollahSoft
شنبه 07 شهریور 1394, 15:08 عصر
سلام دوستان

من با دستور

SELECT DISTINCT name

FROM datastorys

تونستم فیلدهای تکراری رو حذف کنم و فقط ستون name رو همه دارم نمایش میدم.
حالا این کد رو چطوری تو برنامه نویسی اندروید استفاده کنم.
کد من اینه

public String namayesh_dastan (String table , int row , String name , int field){
Cursor Cursor = mydb.rawQuery("select DISTINCT * from "+table+" ",null);
Cursor.moveToPosition(row);
String save = Cursor.getString(field);
return save;

}


ممنون میشم راهنمایی کنین

ali_khodayar
شنبه 07 شهریور 1394, 15:21 عصر
کار این کد اینه که یکسری اطلاعات رو از بانک میگیره و فیلدی که از طریق پارامتر field ارسال میشه و رکوردی که از طریق پارامتر row ارسال میشه رو نمایش میده . شما همین کد رو در یک کلاس ویا در کلاسی که بانک رو ایجاد کردید قرار بدید. مقداری il که متغییر save برمیگردونه مقداریه که شما میخواید و میتونید هرکجا که خواستید مقدارش را نمایش بدید.

AbdollahSoft
شنبه 07 شهریور 1394, 15:52 عصر
کار این کد اینه که یکسری اطلاعات رو از بانک میگیره و فیلدی که از طریق پارامتر field ارسال میشه و رکوردی که از طریق پارامتر row ارسال میشه رو نمایش میده . شما همین کد رو در یک کلاس ویا در کلاسی که بانک رو ایجاد کردید قرار بدید. مقداری il که متغییر save برمیگردونه مقداریه که شما میخواید و میتونید هرکجا که خواستید مقدارش را نمایش بدید.

دوست عزیز من الان تو قسمت کوئری کد بالا می خوام که
Cursor Cursor = mydb.rawQuery(" دستورات ",null);

رو قرار بدم درون این کوئری


SELECT DISTINCT name (نام ستون من)
FROM datastorys (نام بانک من)

ولی همش برنامه من ارور میده . یعنی چطوری بهش بگم که یکی از ستون ها رو نمایش بده که تکراری نداشته باشه .
اخه زیاد برنامه نویسیم خوب نیست . میشه راهنمایی بیشتری کنید .
بازم ممنون

ali_khodayar
شنبه 07 شهریور 1394, 15:55 عصر
میشه بگید چه خطایی میده ؟؟؟
متنش رو بزارید

AbdollahSoft
شنبه 07 شهریور 1394, 16:00 عصر
میشه بگید چه خطایی میده ؟؟؟
متنش رو بزارید

خوب دوست من الان با این کد که اجرا گرفتم

public String namayesh_dastan (String table , int row , String name , int field){
Cursor Cursor = mydb.rawQuery("select DISTINCT * from "+table+" ",null);
Cursor.moveToPosition(row);
String save = Cursor.getString(field);
return save;

}

برنامه تو امولاتور من از 20 تا سر فصلی که دارم به تعداد 20 تا الان داره فقط فصل 1 و فصل 2 رو فقط نمایش میده همش تکراری
یعنی:
-1
-1
.
.
و
-2
-2
.
.
.

AbdollahSoft
شنبه 07 شهریور 1394, 18:41 عصر
من هر کاری می کنم بازم تکراری میزنه یا ارور میده دوستان
اینم کد کوئری :

("select * from "+table+" ",null)
یا
("select DISTINCT * from "+table+" ",null)
یا
("select DISTINCT "+text+" from "+table+" ",null)

من سه بار با روش های بالا امتحان کردم یا ارور داد یا تکراری مثل مثال قبل انجام داد.

AbdollahSoft
شنبه 07 شهریور 1394, 19:11 عصر
مهربانان میشه لطف کنین و یه راهنمایی بفرمایین

ali_khodayar
یک شنبه 08 شهریور 1394, 07:51 صبح
شما برنامت خطا داره یا اینکه خروجی اشتباه میده؟؟؟
مطمئن نیستم اما تا اونجایی که میدونم زمانی که از DISTINCT استفاده می کنید باید بعدش نام فیلد هارو بنویسید. از * نباید استفاده کنید.

AbdollahSoft
یک شنبه 08 شهریور 1394, 14:02 عصر
خوب همون دیگه وقتی که بعد
DISTINCT اسم برنامه رو می ذارم ارور میده .

با این دستور :



public String namayesh_dastan (String table , int row , String season , int field){
Cursor Cursor = mydb.rawQuery("select DISTINCT "+season+" from "+table+" ",null);
Cursor.moveToPosition(row);
String save = Cursor.getString(field);
return save;

}


اینم اروراش:



01-09 05:25:29.788: E/AndroidRuntime(29157): FATAL EXCEPTION: main
01-09 05:25:29.788: E/AndroidRuntime(29157): java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.abdollah.booktest/ir.abdollah.booktest.storys}: android.database.sqlite.SQLiteException: near "تو": syntax error (code 1): , while compiling: select DISTINCT تنها با تو from datastorys
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2343)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2395)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread.access$600(ActivityThre ad.java:162)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1364)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.os.Handler.dispatchMessage(Handler.java:10 7)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.os.Looper.loop(Looper.java:194)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread.main(ActivityThread.jav a:5371)
01-09 05:25:29.788: E/AndroidRuntime(29157): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 05:25:29.788: E/AndroidRuntime(29157): at java.lang.reflect.Method.invoke(Method.java:525)
01-09 05:25:29.788: E/AndroidRuntime(29157): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:833)
01-09 05:25:29.788: E/AndroidRuntime(29157): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:600)
01-09 05:25:29.788: E/AndroidRuntime(29157): at dalvik.system.NativeStart.main(Native Method)
01-09 05:25:29.788: E/AndroidRuntime(29157): Caused by: android.database.sqlite.SQLiteException: near "تو": syntax error (code 1): , while compiling: select DISTINCT تنها با تو from datastorys
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteConnection.nativePre pareStatement(Native Method)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteConnection.acquirePr eparedStatement(SQLiteConnection.java:886)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteConnection.prepare(S QLiteConnection.java:497)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteSession.prepare(SQLi teSession.java:588)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteDirectCursorDriver.q uery(SQLiteDirectCursorDriver.java:44)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteDatabase.rawQueryWit hFactory(SQLiteDatabase.java:1314)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.database.sqlite.SQLiteDatabase.rawQuery(SQ LiteDatabase.java:1253)
01-09 05:25:29.788: E/AndroidRuntime(29157): at ir.abdollah.booktest.database.namayesh_dastan(data base.java:123)
01-09 05:25:29.788: E/AndroidRuntime(29157): at ir.abdollah.booktest.storys.refresher(storys.java: 103)
01-09 05:25:29.788: E/AndroidRuntime(29157): at ir.abdollah.booktest.storys.onCreate(storys.java:3 4)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.Activity.performCreate(Activity.java:5 122)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1081)
01-09 05:25:29.788: E/AndroidRuntime(29157): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2307)
01-09 05:25:29.788: E/AndroidRuntime(29157): ... 11 more

AbdollahSoft
یک شنبه 08 شهریور 1394, 14:16 عصر
مشکل اینجاست که من نمی تونم درست تعریف کنم که چیکار کنه .

ali_khodayar
یک شنبه 08 شهریور 1394, 14:49 عصر
near "تو": syntax error (code 1): , while compiling: select DISTINCT تنها با تو from datastorys
اینجا گفته دیگه .
شما باید مقداری که برای season ارسال میکنید نام یکی از ستون های جدولتون باشه نه اینکه مقدار یک فیلد. مثلأ باید نام کتاب ،عنوان کتاب یا کد کتاب باشه .
شما به اشتباه مقدار یک فیلد رو دارید ارسال می کنید .


SELECT DISTINCT ID FROM TABLE_NAME
بجای ID مقدار نام فیلد جدولت رو بزار و بجای TABLE_NAME نام جدول رو قرار بده

AbdollahSoft
یک شنبه 08 شهریور 1394, 15:06 عصر
خوب فکر کنم درست نوشتم باشم ولی بازم ارور میده .

("select DISTINCT "+name+" from "+table+" ",null);

ali_khodayar
یک شنبه 08 شهریور 1394, 15:49 عصر
باز هم متن خطا با قبلیه دقیقأ یکیه؟؟؟

میشه مقداری رو که برای name , table ارسال میکنید رو اینجا بزارید؟؟

AbdollahSoft
یک شنبه 08 شهریور 1394, 17:04 عصر
باز هم متن خطا با قبلیه دقیقأ یکیه؟؟؟

میشه مقداری رو که برای name , table ارسال میکنید رو اینجا بزارید؟؟

اره یکیه .

134763
این جدول منه
من می خوام NAME رو نمایش بدم فقط که نام سر فصل های من است.

ali_khodayar
دوشنبه 09 شهریور 1394, 07:52 صبح
SELECT DISTINCT name FROM dataStory

به نظرم پارامتری کار نکنید . فعلأ به صورت ثابت دستور SQL رو وارد کنید ، جواب که گرفتید بعدش نام فیلد و جدول رو برای دستور ارسال کنید.