-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
سلام
مشکل از جدول SQLite شماست و یا کوئری که دارید مینویسید
شما داخل کوئری تون اومدید ستون های آیدی، عنوان، ... و sub رو select کردید
این خطا داره میگه ستونی به اسم sub توی جدولتون ندارید
ممکنه شما این ستون رو داشته باشید، اما فایل دیتابیس پروژتون رو آپدیت نکرده باشید
به هرحال یا باید این ستون وجود داشته باشه، یا اینکه شما این ستون رو از توی کوئری حذف کنید
ممنونم دوست من.
من ستون sub رو اضاقه کردم به دیتابیس و بعد اومدم دستور جدید رو که در پایان ساخت sqlite میده رو به پروژه آوردم و قسمت sub رو اضاقه کردم..الان تو دیتابیس sub داره تو پروژه هم sub معرفی شده..اما فکر میکنم اینکه اومدم یه ستون یه دیتابیس اضاقه کردم خراب شده باشه.درسته؟
آقا جکار میتونیم بکنم؟یه دیتابیس زیادیه.او چیزی که فرمودید آپدیت نکردم چطوری باید این کار رو بکنم؟
خیلی ممنونم ازتون
عذر میخوام به سوال هم از محضر شما در این بخش کردم.ممنون میشم جواب بدید لطفا.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
narvanco
ممنونم دوست من.
من ستون sub رو اضاقه کردم به دیتابیس و بعد اومدم دستور جدید رو که در پایان ساخت sqlite میده رو به پروژه آوردم و قسمت sub رو اضاقه کردم..الان تو دیتابیس sub داره تو پروژه هم sub معرفی شده..اما فکر میکنم اینکه اومدم یه ستون یه دیتابیس اضاقه کردم خراب شده باشه.درسته؟
آقا جکار میتونیم بکنم؟یه دیتابیس زیادیه.او چیزی که فرمودید آپدیت نکردم چطوری باید این کار رو بکنم؟
خیلی ممنونم ازتون
عذر میخوام به سوال هم از محضر شما در
این بخش کردم.ممنون میشم جواب بدید لطفا.
این اضافه کردن ستون و اینا رو متوجه نشدم دقیقا چکار کردید
اما مهم اینه که فایل دیتابیس شما با چیزی که دارید کدش رو مینویسید همخونی داشته باشه
شما دارید از لایبری دیتابیس آماده استفاده میکنید؟ اگر آره، این لایبری یک خاصیت داره که اگر تغییری توی دیتابیس بدید باید یکی به ورژن اضافه کنید و یک خط کد رو توی کلاس MyDatabase اضافه کنید که توی صفحه اول همین تاپیک، تقریبا پست های آخر توضیح داده شده
حالا به هرحال قضیه اینجاست که تا ورژن بالا نره، برنامه از دیتابیس قبلی که قبلا توی دیوایس کپی شده استفاده میکنه
راه ساده اینه که شما برید داخل ایمولاتور، قسمت تنظیمات، بعد مدیریت برنامه ها یا app manager و بعد توی قسمت برنامتون، دیتا رو پاک کنید clear data
دیگه اینطوری وقتی دیتابیسی توی دیوایس نباشه، برنامه مجبور میشه فایل دیتابیس رو دوباره کپی کنه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوستان یه سوال
چطوری میشه در دیتابیس بر اساس فیلدی بجز id انتخلب رو انجام داد ؟؟؟
خیلی برام عجیبه کد اول درسته ولی کد دومی خطا میده !!
Cursor cursor = mDataBase.rawQuery("SELECT FROM L1 WHERE ID = 1" , null);
Cursor cursor = mDataBase.rawQuery("SELECT FROM L1 WHERE name = ali" , null);
ممنون
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
scofield
دوستان یه سوال
چطوری میشه در دیتابیس بر اساس فیلدی بجز id انتخلب رو انجام داد ؟؟؟
خیلی برام عجیبه کد اول درسته ولی کد دومی خطا میده !!
Cursor cursor = mDataBase.rawQuery("SELECT FROM L1 WHERE ID = 1" , null);
Cursor cursor = mDataBase.rawQuery("SELECT FROM L1 WHERE name = ali" , null);
ممنون
خب دوستان لطف کردن توی تاپیکی که جداگانه ساختید جواب دادن
من فقط لینک جواب رو میذارم که اگر کسی این مشکل رو داشت به جواب برسه
https://barnamenevis.org/showthread.p...=1#post2071431
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ببخشید بنده یه لیست ویو به زبان html دارم . می شه براش به وسیله دیتابیس قسمت علاقه مندی ها گذاشت ؟ یعنی آیتم از لیست ویو که انتخاب شد بره داخل یه صفحه دیگه و اونجا به علاقه مندی های کاربر اضافه شه . با تشکر
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mdibmehr2
ببخشید بنده یه لیست ویو به زبان html دارم . می شه براش به وسیله دیتابیس قسمت علاقه مندی ها گذاشت ؟ یعنی آیتم از لیست ویو که انتخاب شد بره داخل یه صفحه دیگه و اونجا به علاقه مندی های کاربر اضافه شه . با تشکر
سلام
متاسفانه من با زبان HTML و کار با دیتابیس در اون آشنا نیستم
این آموزش ها مربوط به زبان جاوا و اکلیپس هست، سوالی توی زبان جاوا داشتید در خدمتم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام دوستان
برای افزایش سرعت insert چه راه هایی وجود داره ؟
من مشابه اینجا insert میکنم و سایر کار ها
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
فیلم آموزش ASP.Net به زبان فارسی از مقدماتی تا پیشرفته را از لینکهای زیر دانلود کنید
http://banke-maghalat.ir/images/image/download.gif قسمت سوم
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
poorman
آموزش کار با دیتابیس آماده SQLite
برای ساخت یک دیتابیس خارجی و آماده نرم افزار
SQLite Database Browser رو پیشنهاد میکنم
نمونه کار با دیتابیس آماده و نمایش و آپدیت اطلاعات دیتابیس رو از
این پست دریافت کنید
-----------------------------------------------------------------------------------------------
بالاخره من دیشب تونستم تمام مشکلات مربوط به دیتابیس آماده رو حل کنم و ارتباط خوبی برقرار کنم با لایبری
sqlite asset helper
( با تشکر از hamedjj به خاطر پافشاری روی استفاده از این لایبری )
ولی خب استفاده از این لایبری هم یکم برام گیج کننده بود که خدا رو شکر تونستم آخرش راه بندازمش
من یه توضیح میدم واسه کسایی که میخوان با دیتابیس آماده کار کنن و مثل من به مشکل خوردن
انصافا استفاده از sqlite asset helper راحته و بسیار کارا
یکی از مشکلاتی که من برخورد کردم توی استفاده از کلاس های دیگه، این بود که توی اندروید 10 به پایین دیتابیس رو ایجاد نمیکرد ولی این لایبری مشکل رو حل کرد
خب دوستانی که با اکلیپس کار میکنن این فایل jar رو دانلود کنن و توی پروژه مورد نظر در پوشه libs قرار بدن
لینک فایل jar
توی پوشهassets یک پوشه به اسم databases بسازید
بعد دیتابیس خودتون رو zip کنید ( فایل دیتابیس به تنهایی باید پسوند .db داشته باشه )
فایل زیپ شده رو با فرمت اسم ( DataBaseName.db.zip ) توی پوشه databases بذارید. ( دقت کنید باید هم پسوند db هم پسوند zip داشته باشه )
یعنی نمایش فایل زیپ توی ویندوز به صورت DataBaseName.db و نمایش توی اکلیپس به شکل DataBaseName.db.zip باشه
بعدش این کلاس رو ایجاد کنین
public class MyDatabase extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "DataBaseName.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
توی کلاسی که ایجاد کردین اسم دیتابیس خودتون رو با پسوند db وارد کنین
بعدش توی اکتیویتی توی متغیرهای عمومی یک نمونه از این کلاس تعریف کنید، به این صورت :
private MyDatabase MyDataBase;
و بعد توی متد onCreate این خط کد رو بنویسین :
MyDataBase = new MyDatabase(this);
حالا هر جایی که خواستین دیتابیس رو باز کنین، میتونین از دو تا حالت getWritableDatabase() و getReadableDatabase() که برای خوندن و نوشتن هست استفاده کنین
به صورت زیر مثلا :
mydb = MyDataBase.getReadableDatabase();
وقتی getReadableDatabase استفاده میکنید، فقط عملیات خواندن رو میتونید انجام بدید
پس برای نوشتن یا آپدیت و دیلت باید از getWritableDatabase استفاده کنید
به همین سادگی، فقط باید تمام این مراحل رو به ترتیب و همینطور که گفتم انجام بدید که به مشکل نخورید
( zip کردن دیتابیس برای اینه که توی اندروید 10 به پایین خطا نگیرید )
آموزش کار با دیتابیس ( خواندن، نوشتن، آپدیت و دیلت ) توی همین تاپیک قرار داده شده
لطفا بعد از مطالعه درصورت وجود مشکل سوال بپرسید در خدمتم
----------------------------------------------------------------------------------------------
برای آپدیت کردن اطلاعات دیتابیس آماده به این پست مراجعه کنید
اگر مفید واقع شد، دکمه تشکر این پایینه :لبخند:
ببخشید فایل sqliteبا پسوند sqlite. ذخیره میشه و وقتی پسوندش و تبدیل به db.میکنم،نمیشناسه و حتی موقع زیپ کردن این پسوند و نادیده می گیره ، باید چیکار کنم ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
از برنامه ای که برای کار با دیتابیس آماده معرفی کردم استفاده کنید، من با برنامه های دیگه کار نکردم و توی مسائل فرمت ذخیره کردنشون اطلاعی ندارم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
برای کار با پایگاه داده یک کلاس نوشتم که می تونید در تایپیک زیر ببینید
https://barnamenevis.org/showthread.p...=1#post2087129
موفق باشید
-
نقل قول: آموزش : کار با دیتابیس SQLite، ساختن و استفاده از دیتابیس آماده
نقل قول:
نوشته شده توسط
poorman
سلام
کاری نداره شما باید برای کوئری فقط یک شرط بذارید تا اطلاعات اون سطر رو برگردونه
بعدش با اطلاعات هر کاری خواستی میکنی، اینجا چون میدونم فقط یک سطر جواب داریم، نیاز به حلقه تکرار و آرایه نیست دیگه
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE + " where _id = 3", null);
if(allrows.moveToFirst()){
textView.setText(allrows.getString(1));
}
allrows.close();
mydb.close();
توی این مثال تمام ستون های سطری که فیلد _id اون برابر 3 هست انتخاب میشن، و بعد مثلا محتوای ستون دوم ( ایندکس 1 ) داخل تکست ویو نمایش داده میشه
سلام به همه دوستان .میشه لطف کنید بگید چرا من با نوشتن این کدها چیزی در برنامم نوشته نمیشه با اینکه خطایی نمیدهد و می گوید دیتابیس باز شده است ولی متنی نمایش داده نمیشود .
;(MyDataBase= new MyDatabase(this
;()mydb = MyDataBase.getReadableDatabase
;(Cursor cursor= mydb.rawQuery("SELECT * FROM "+ TABLE, null
;()cursor.moveToFirst
;((txt.setText( cursor.getString(3
;()cursor.close
;()mydb.close
-
نقل قول: آموزش : کار با دیتابیس SQLite، ساختن و استفاده از دیتابیس آماده
نقل قول:
نوشته شده توسط
**nastaran**
سلام به همه دوستان .میشه لطف کنید بگید چرا من با نوشتن این کدها چیزی در برنامم نوشته نمیشه با اینکه خطایی نمیدهد و می گوید دیتابیس باز شده است ولی متنی نمایش داده نمیشود .
;(MyDataBase= new MyDatabase(this
;()mydb = MyDataBase.getReadableDatabase
;(Cursor cursor= mydb.rawQuery("SELECT * FROM "+ TABLE, null
;()cursor.moveToFirst
;((txt.setText( cursor.getString(3
;()cursor.close
;()mydb.close
مطمئن هستید داخل ستونتون چیزی وجود داره ؟ من حدس میزنم داخل ستونی که دارید اطلاعاتش رو میخونید چیزی نیست
ایندکس 3 که شما نوشتید میشه ستون چهارم جدولتون ( ممکنه به این دقت نکرده باشید )
از این کد استفاده کنید تا دقیقا مقدار همون ستونی که میخواید رو بگیرید و مطمئن بشید اون ستون مقدار داره
txt.setText( cursor.getString(cursor.getColumnIndex("columnName ")));
-
1 ضمیمه
نقل قول: آموزش : کار با دیتابیس SQLite، ساختن و استفاده از دیتابیس آماده
ممنون از پاسختون
بله مقدار دارد ولی ستون چهارمم مقدار عددی بود الان ایندکس رو 2 هم گذاشتم که مربوط به ستون متنی بود باز هم چیزی نمی نویسد حتی از این دستور هم گفتید استفاده کردم و به جای آن "name" نوشتم که مربوط به یکی از ستونهایم بود ولی باز هم خروجی ندارد.عکس دیتابیس رو هم براتون گذاشتم
ضمیمه 122959
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
شاید شما دیتابیستون رو آپدیت نکردید توی برنامه
احتمال داره اول که دیتابیس رو ساختید خالی بوده و بعد اطلاعات رو توش وارد کردید و گذاشتید توی پوشه asset اما یادتون رفته توی کلاس myDatabase ورژن رو یکی اضافه کنید و خط setForcedUpgrade() رو به تابع myDatabase توی همون کلاس اضافه کنید
درصد زیادی احتمال داره که برنامه داره از دیتابیس قبلی استفاده میکنه
یا دیتابیس برنامه رو از توی ایمولاتور -> تنظیمات -> برنامه ها -> اسم برنامه -> clear data پاک کنید
یا اینکه به روشی که گفتم دیتابیس رو آپدیت کنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
شاید شما دیتابیستون رو آپدیت نکردید توی برنامه
احتمال داره اول که دیتابیس رو ساختید خالی بوده و بعد اطلاعات رو توش وارد کردید و گذاشتید توی پوشه asset اما یادتون رفته توی کلاس myDatabase ورژن رو یکی اضافه کنید و خط setForcedUpgrade() رو به تابع myDatabase توی همون کلاس اضافه کنید
درصد زیادی احتمال داره که برنامه داره از دیتابیس قبلی استفاده میکنه
یا دیتابیس برنامه رو از توی ایمولاتور -> تنظیمات -> برنامه ها -> اسم برنامه -> clear data پاک کنید
یا اینکه به روشی که گفتم دیتابیس رو آپدیت کنید
خیلی ممنون از پاسختون مشکلم همین بود و الان برطرف شد :لبخندساده:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوستان
وقتی در دیتابیس متون عربی نوشته میشه و میخوام اونو در تکست ویو بیارم ، حرکات بهم ریخته میشه و خیلی نزدیک به حرف ها قرار میگیرن.
مشکل چی میتونه باشه؟
خیلی ممنون
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
narvanco
دوستان
وقتی در دیتابیس متون عربی نوشته میشه و میخوام اونو در تکست ویو بیارم ، حرکات بهم ریخته میشه و خیلی نزدیک به حرف ها قرار میگیرن.
مشکل چی میتونه باشه؟
خیلی ممنون
سلام
مشکل از دیتابیس نیست، مشکل از فونت شماست یا اینکه اگر از کلاس های فارسی ساز استفاده میکنید، مشکل از اوناست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام.با تشکر از مطلب خوبتون.می خوام به دیتابیس برنامه م موقع اجرا دسترسی داشته باشم.باید چکار کنم؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mz6488
سلام.با تشکر از مطلب خوبتون.می خوام به دیتابیس برنامه م موقع اجرا دسترسی داشته باشم.باید چکار کنم؟
سلام، ممنون متوجه منظورتون نشدم، یعنی چی میخواین موقع اجرا به دیتابیس دسترسی داشته باشید؟ این مطالبی که آموزش دادم همه درباره اینه که در حین اجرا یک سری عملیاتی رو با دیتابیس انجام بدید، از دیتابیس بخونید، بنویسید و ... اگر چیز دیگه ای منظورتون هست، بیشتر توضیح بدید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
سلام، ممنون متوجه منظورتون نشدم، یعنی چی میخواین موقع اجرا به دیتابیس دسترسی داشته باشید؟ این مطالبی که آموزش دادم همه درباره اینه که در حین اجرا یک سری عملیاتی رو با دیتابیس انجام بدید، از دیتابیس بخونید، بنویسید و ... اگر چیز دیگه ای منظورتون هست، بیشتر توضیح بدید
من دیتابیس جدید رو تو sdCard می ذارم.می خوام که دیتابیس رو از sdCard کپی کنم و جایگزین دیتابیس قبلی کنم که فکر کنم تو پوشه data ذخیره میشه.ولی نمیتونم بهش دسترسی داشته باشم.
اینم بگم که بنا به دلایلی می خوم دیتابیس رو جایگزین کنم(هر دفعه فقط دیتابیس رو میذارم تو sdCard).امیدوارم متوجه منظورو شده باشین هر چند عجیب غریبه ولی به شدت نیازش دارم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mz6488
من دیتابیس جدید رو تو sdCard می ذارم.می خوام که دیتابیس رو از sdCard کپی کنم و جایگزین دیتابیس قبلی کنم که فکر کنم تو پوشه data ذخیره میشه.ولی نمیتونم بهش دسترسی داشته باشم.
اینم بگم که بنا به دلایلی می خوم دیتابیس رو جایگزین کنم(هر دفعه فقط دیتابیس رو میذارم تو sdCard).امیدوارم متوجه منظورو شده باشین هر چند عجیب غریبه ولی به شدت نیازش دارم
متاسفانه فکر نکنم بتونم توی این زمینه راهنمایی کنم، تجربه ای ندارم توی این قسمت
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام استاد poorman خسته نباشید.
متن تونستم یک جستجو در متن بسازم که متن ها رو از دیتا بیس می گیره.ولی من می خوام جستجو به صورت هایلایت و با نمایش متن مورد جستجو انجام بگیره.برای این کار چیکار باید بکنم. (در جستجویی که من دارم صرفا سر تیر موضوع رو نشون میده و متن های اصلی که کلمه مورد نظر در اون هست نشون داده نمی شه.
می خوا یه چیزی مثل عکس پایین بشه.
با تشکر و سپاس از شما.
http://s.cafebazaar.ir/1/upload/scre...ciallegal2.jpg
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام .
من میخوام برنامه وقتی آپدیت میشه لازم نباشه که قبلی رو حذف کنیم و خودش عمل حذف رو انجام بده.
از دستوراتی که نوشته بودید استفاده کردم اما نشد.
کد اون بخش رو میزارم لطفا راهنماییم کنید.
متشکرم
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
// DATABASE_VERSION = 1
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
[/JAVA][/JAVA][/JAVA][/JAVA]
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام
من از روی نمونه کدی که گذاشته بودید لیستی درست کردم و برنامه بدون مشکل اجرا میشه و اطلاعات رو نشون میده
اما:
وقتی دکمه fav رو میزنم و از اکتیویتی بیرون میرم و برمیگردم ، تغییرات اعمال نشده
بلافاصله بعد از کد sql update یک toast گذاشتم و وضعیت fav رو چک کردم و دیدم تغییرات اعمال نمیشه
دستور sql update رو جداگانه در sqlite اجرا کردم ولی مشکلی نداشت و تغییرات رو اعمال می کنه
favotite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
if(isChecked == true) {
mydb.execSQL("update [main].[tb_book] set fav = '1' where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=1 / favpos:"+fav[position]+" / idpos:"+ID[position], 1000).show();
} else {
mydb.execSQL("update [main].[tb_book] set fav = 0 where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=0"+position, 1000).show();
}
mydb.close();
}
});
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mojniknam
وقتی دکمه fav رو میزنم و از اکتیویتی بیرون میرم و برمیگردم ، تغییرات اعمال نشده
بلافاصله بعد از کد sql update یک toast گذاشتم و وضعیت fav رو چک کردم و دیدم تغییرات اعمال نمیشه
یعنی هیچ Toastی نشان داده نمیشه ؟
در این حالت مشکل از شرطی که قراردادین میتونه باشه
نقل قول:
نوشته شده توسط
mojniknam
دستور sql update رو جداگانه در sqlite اجرا کردم ولی مشکلی نداشت و تغییرات رو اعمال می کنه
فقط Query بروزرسانی رو اجرا کردین بدون شرط ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
toast رو نشون میده ولی مقدار فیلد fav رو 0 نشون میده درحالیکه در یک خط قبلش با sql update اون رو 1 کردیم
query:
update [main].[tb_book] set fav = 1 where ID = 1;
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mojniknam
toast رو نشون میده ولی مقدار فیلد fav رو 0 نشون میده درحالیکه در یک خط قبلش با sql update اون رو 1 کردیم
query:
update [main].[tb_book] set fav = 1 where ID = 1;
درسته یک کردین ولی گفتین اگه isChecked مساوی true باشه اینکار رو کنه و در else گفتین در غیر اینصورت اینکار رو کنه که اون Toast همون قسمت Else شرط است!
پس با این حساب شما چیزی رو 1 نکردین
ببین مقدار isChecked چی هست ؟
Toast.makeText(getContext(), ""+isChecked, 1).show();
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من توی هر دو قسمت شرط toast گذاشتم
favotite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
if(isChecked == true) {
mydb.execSQL("update [main].[tb_book] set fav = 1 where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=1 / favDB:"+fav[position], 1000).show();
} else {
mydb.execSQL("update [main].[tb_book] set fav = 0 where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=0 / favDB:"+fav[position], 1000).show();
}
mydb.close();
}
});
خط 6 میگه: روی دکمه fav که کلیک شده اگه true شده بنابراین .......
خط 7 میگه: اگه true بود توی دیتابیس fav رو 1 کنه
خط 8 میگه: toast رو نشون بده که مقدار fav در دیتا بیس چنده (که برای من نشون میده 0)
خط 9: در غیر اینصورت (اگه پس از کلیک کردن روی دکمه fav برابر با false شده باشه)
خط 10: توی دیتابیس fav رو 0 کنه
خط 8 میگه: toast رو نشون بده که مقدار fav در دیتا بیس چنده (که برای من نشون میده 0)
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
منظورم رو نگرفتی
ببین اصلا متن Toast هارو یه چیزه دیگه کن مثل هم نباشند دوباره تست بزنی میبینی فقط قسمت else شرط برات اجرا میشه
روی خط 6 Breakpoints بزار و debug رو بزن تا اجرا شه (run نزنی) میبینی به اون خط که رسید میپره به else دستور
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
شرط درست اجرا میشه
متن toast هم متفاوته (اول یکیش fav=1 نوشته و اول یکی دیگه اش fav=0 نوشته)
یک نکته ای که شاید اهمیت داشته باشه اینه که fav از نوع integer هست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
zikimiki
سلام استاد
poorman خسته نباشید.
متن تونستم یک جستجو در متن بسازم که متن ها رو از دیتا بیس می گیره.ولی من می خوام جستجو به صورت هایلایت و با نمایش متن مورد جستجو انجام بگیره.برای این کار چیکار باید بکنم. (در جستجویی که من دارم صرفا سر تیر موضوع رو نشون میده و متن های اصلی که کلمه مورد نظر در اون هست نشون داده نمی شه.
می خوا یه چیزی مثل عکس پایین بشه.
با تشکر و سپاس از شما.
http://s.cafebazaar.ir/1/upload/scre...ciallegal2.jpg
سلام
این چیزی که میخواین پیاده سازی کنید ارتباطی به دیتابیس نداره
بعد از اینکه جستجو رو انجام دادید، موقع نمایش باید این مورد پیاده سازی بشه
یعنی توی نتایجی که به دست اومده، هرجایی که اون کلمه وجود داره رو هایلایت کنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
narvanco
سلام .
من میخوام برنامه وقتی آپدیت میشه لازم نباشه که قبلی رو حذف کنیم و خودش عمل حذف رو انجام بده.
از دستوراتی که نوشته بودید استفاده کردم اما نشد.
کد اون بخش رو میزارم لطفا راهنماییم کنید.
متشکرم
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
// DATABASE_VERSION = 1
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(CREATE_TABLE);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
[/JAVA][/JAVA][/JAVA][/JAVA]
سلام
شما باید هر دفعه که تغییری توی دیتابیس انجام میدید ورژن رو یکی اضافه کنید
در این صورت تابع onUpgrade اجرا میشه و دیتابیستون رو آپدیت میکنه
اگر از دیتابیس آماده و لایبری SQLiteAsset Helper استفاده کنید این کار تنها با بالا بردن ورژن انجام میشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
mojniknam
سلام
من از روی نمونه کدی که گذاشته بودید لیستی درست کردم و برنامه بدون مشکل اجرا میشه و اطلاعات رو نشون میده
اما:
وقتی دکمه fav رو میزنم و از اکتیویتی بیرون میرم و برمیگردم ، تغییرات اعمال نشده
بلافاصله بعد از کد sql update یک toast گذاشتم و وضعیت fav رو چک کردم و دیدم تغییرات اعمال نمیشه
دستور sql update رو جداگانه در sqlite اجرا کردم ولی مشکلی نداشت و تغییرات رو اعمال
می کنه
favotite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
if(isChecked == true) {
mydb.execSQL("update [main].[tb_book] set fav = '1' where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=1 / favpos:"+fav[position]+" / idpos:"+ID[position], 1000).show();
} else {
mydb.execSQL("update [main].[tb_book] set fav = 0 where ID = " + ID[position]);
Toast.makeText(getContext(), "fav=0"+position, 1000).show();
}
mydb.close();
}
});
سلام
به نظرم با شرط زیر بهتر میشه کار کرد
if(fav[position] == 1){
fav[position] = 0;
}else{
fav[position] = 1;
}
update database set fav = fav[position]
امتحان کنید، فکر میکنم مشکلتون رو حل کنه
حتما یادتون باشه که چک باکس رو توی getView براساس وضعیتی که داره تغییر بدید
if(fav[position] == 1){
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
سلام
این چیزی که میخواین پیاده سازی کنید ارتباطی به دیتابیس نداره
بعد از اینکه جستجو رو انجام دادید، موقع نمایش باید این مورد پیاده سازی بشه
یعنی توی نتایجی که به دست اومده، هرجایی که اون کلمه وجود داره رو هایلایت کنید
ممنون از پاسخ گویی شما
مشکل من اینجاست که نمی دونم برای نمایش از چه کدی باید استفاده کنم .توی فروم های خارجی ! هم گشتم ولی چیزی پیدا نکردم.شما کدی برای نمایش به صورت هایلات سراغ دارید؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
zikimiki
ممنون از پاسخ گویی شما
مشکل من اینجاست که نمی دونم برای نمایش از چه کدی باید استفاده کنم .توی فروم های خارجی ! هم گشتم ولی چیزی پیدا نکردم.شما کدی برای نمایش به صورت هایلات سراغ دارید؟
شما میتونید از Spannable برای این کار استفاده کنید
به این صورت که یک ایندکس از شما دریافت میکنه و توی متن اون ایندکس رو به رنگ دلخواه یا استایلی که براش مشخص میکنید در میاره
کار باهاش راحت هست، توی گوگل جستجو کنید
http://stackoverflow.com/questions/4...xtview-settext
http://stackoverflow.com/questions/2...spannable-text
http://stackoverflow.com/questions/1...d-for-textview
راه دیگه هم استفاده از فرمت HTML برای تکست هست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نشد!
کل کد Adapter رو میذارم
package ir.niknam.daghdagheha;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.ListView;
public class ActivityFehrest extends Activity {
private MyDatabase MyDatabase;
public ListView listview;
SQLiteDatabase mydb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fehrest);
MyDatabase = new MyDatabase(this);
mydb = MyDatabase.getReadableDatabase();
Cursor c = mydb.rawQuery("SELECT [main].[tb_book].[ID],[main].[tb_book].[nam],[main].[tb_book].[matn],[main].[tb_book].[targ],[main].[tb_book].[fav],[main].[tb_book].[khande] FROM [main].[tb_book]", null);
int ID[] = new int[c.getCount()];
String nam[] = new String[c.getCount()];
String matn[] = new String[c.getCount()];
int fav[] = new int[c.getCount()];
int khande[] = new int[c.getCount()];
int targ[] = new int[c.getCount()];
int i = 0;
if(c.moveToFirst()) {
do {
ID[i] = c.getInt(0);
nam[i] = c.getString(1);
matn[i] = c.getString(2);
fav[i] = c.getInt(3);
khande[i] = c.getInt(4);
targ[i] = c.getInt(5);
i++;
} while (c.moveToNext());
c.close();
mydb.close();
}
listview = (ListView) findViewById(R.id.listView1);
MyAdapter adapter = new MyAdapter(this, nam, matn, fav, khande, targ, ID);
listview.setAdapter(adapter);
}
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
لطفا کلاس آداپترتون رو بذارید، این کد اکتیویتی تون هست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
package ir.niknam.daghdagheha;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListe ner;
import android.widget.TextView;
@SuppressLint("ShowToast")
public class MyAdapter extends ArrayAdapter<String>{
private final Activity context;
String nam[];
String matn[];
int fav[];
int khande[];
int targ[];
int ID[];
public MyAdapter(Activity context,String nam[], String matn[], int fav[], int khande[], int targ[], int ID[]) {
super(context, R.layout.item, nam);
this.context = context;
this.nam = nam;
this.matn = matn;
this.fav = fav;
this.khande = khande;
this.targ = targ;
this.ID = ID;
}
@Override
public boolean isEnabled(int position) {
return true;
}
@SuppressLint({ "ViewHolder", "InflateParams" })
@Override
public View getView(final int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.item, null, true);
TextView txtName = (TextView) rowView.findViewById(R.id.txt_name);
CheckBox favotite = (CheckBox) rowView.findViewById(R.id.favorite_check);
txtName.setText(nam[position]);
if(fav[position]==0) {
favotite.setChecked(false);
} else if (fav[position]==1) {
favotite.setChecked(true);
}
favotite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@SuppressLint("ShowToast")
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
if(fav[position] == 1) {
fav[position] = 0;
Toast.makeText(getContext(), "fav=0 / favDB:"+fav[position], 1000).show();
} else {
fav[position] = 1;
Toast.makeText(getContext(), "fav=1 / favDB:"+fav[position], 1000).show();
}
mydb.execSQL("update [main].[tb_book] set fav = "+fav[position]+" where ID = " + ID[position]);
Toast.makeText(getContext(), "favSQL / favDB:"+fav[position], 1000).show();
mydb.close();
}
});
return rowView;
} }
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
@SuppressLint({ "ViewHolder", "InflateParams" })
@Override
public View getView(final int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.item, null, true);
TextView txtName = (TextView) rowView.findViewById(R.id.txt_name);
CheckBox favotite = (CheckBox) rowView.findViewById(R.id.favorite_check);
txtName.setText(nam[position]);
if(fav[position]==0) {
favotite.setChecked(false);
} else if (fav[position]==1) {
favotite.setChecked(true);
}
favotite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@SuppressLint("ShowToast")
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
MyDatabase MyDatabase = new MyDatabase(context);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
if(isChecked) {
fav[position] = 0;
Toast.makeText(getContext(), "fav=0 / favDB:"+fav[position], 1000).show();
} else {
fav[position] = 1;
Toast.makeText(getContext(), "fav=1 / favDB:"+fav[position], 1000).show();
}
mydb.execSQL("update [main].[tb_book] set fav = "+fav[position]+" where ID = " + ID[position]);
Toast.makeText(getContext(), "favSQL / favDB:"+fav[position], 1000).show();
mydb.close();
}
});
return rowView;
} }
با شرط isChecked این کار رو انجام بدید ببینید نتیجه چی میشه
اگر مشکل حل نشد لطفا قشنگ با جزئیات توضیح بدید که چه اتفاقی میفته