-
آموزش : کار با دیتابیس SQLite، ساختن و استفاده از دیتابیس آماده
سلام
این مطلب در سال ۱۳۹۲ نوشته شده، آموزش کاملتر و جامعتری رو داریم تهیه میکنیم که میتونید در آدرسهای زیر مطالعه کنید.
بخش اول: آشنایی با دیتابیس - ساخت جدول و وارد کردن اطلاعات به جدول
بخش دوم: خواندن اطلاعات از جدول و استفاده از اونها
بخش سوم: آپدیت و حذف کردن اطلاعات درون جدول
بخش چهارم: پیاده سازی دیتابیس پیشرفته اندروید با استفاده از کلاس ها
بخش پنجم: پیاده سازی گام به گام نمونه پروژه دیتابیس پیشرفته
بخش ششم: آموزش استفاده از دیتابیس آماده اندروید
-----------------------------------------------------------------------------------------------
توی این پست ابتدا ساخت دستی دیتابیس و سپس کار با دیتابیس رو یاد میگیرید
درصورتی که میخواین با دیتابیس آماده کار کنین این پست رو مشاهده کنین
-----------------------------------------------------------------------------------------------------------------------
واقعیت اینه که من از همون اول نتونستم با پیچیدگی کلاس DataBaseHelper ارتباط خوبی برقرار کنم ، به همین خاطر خیلی ساده و ابتدایی میخوام کار با دیتابیس رو بدون پیچیدگی آموزش بدم
باشد که خدا از ما راضی باشد :خجالت:
برای دیتابیس چند تا پارامتر داریم ، یکی شیء دیتابیس که اینطوری تعریف میشه
SQLiteDatabase mydb;
بعد نام دیتابیسی که میخوایم ایجاد کنیم یا ازش استفاده کنیم
private static String DBNAME = "PERSONS"; // THIS IS THE SQLITE DATABASE FILE NAME.
بعد نام جدول یا جدول های دیتابیس رو برای استفاده تعریف میکنید ، اگر با مفهوم جدول آشنا نیستید باید بگم بخشی از دیتابیس هست که شما می تونید اطلاعات مربوط به یک موضوع یا اصطلاحا موجودیت خاص رو ذخیره کنید
private static String TABLE = "MY_TABLE"; // THIS IS THE TABLE NAME
خب تا اینجا شما هیچ کار نکردید ، فقط اطلاعات دیتابیس رو برای استفاده مشخص کردید
حالا با این کد ما یک دیتابیس با اسمی که در بالا مشخص کردیم رو درست میکنیم و اگر این دیتابیس قبلا وجود داشت بازش میکنیم تا ازش برای ورود یا خوندن اطلاعات استفاده کنیم
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
----------------------------------------------------------------------------------------
ساخت جدول در دیتابیس
خب حالا دیتابیس ما برای استفاده آماده ست ، الان نیاز به یک جدول با مشخصات مورد نظرمون برای ثبت اطلاعات داریم ( دیتابیس میتونه دارای چندین جدول باشه ، و هر جدول میتونه به ازای هر مشخصه یک ستون داشته باشه که باید نوع اون رو تعریف کنیم )
مثلا اگر شما میخواین اطلاعات یک دانش آموز رو ذخیره کنین ، ممکنه به این ترتیب جدول رو بسازید
ستون شماره دانش آموزی ، ستون نام ، نام خانوادگی ، معدل
هر جدول باید یک ستون داشته باشه که مقدار اون تکراری نباشه (primary key) ، اگر همچین مشخصه ای نداشتین میتونین یک ستون به اسم ID بسازید و بذارید که خود sqlite اون رو مقدار بده
mydb.execSQL("CREATE TABLE IF NOT EXISTS "+ TABLE +" (ID INTEGER PRIMARY KEY, NAME TEXT, PLACE TEXT);");
خب جدول ما درصورتی که وجود نداشته باشه ساخته میشه ( دقت کنید اول اسم ستون ، بعد نوع محتویات ستون مثلا AGE INTEGER )
اگر کارتون با دیتابیس تموم شد حتما اون رو با کد زیر ببندید
mydb.close();
-----------------------------------------------------------------------------------------------
وارد کردن اطلاعات در جدول ( از طریق کد )
حالا اگر خواستید اطلاعات رو وارد جدول کنید ، اگر دیتابیس بسته ست بعد از باز کردن اون از کد زیر استفاده میکنیم
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('یک دو سه','امتحان')");
mydb.close();
اینجا ما دو تا ستون NAME و PLACE رو مقدار دادیم ، و همونطور که دقت میکنید ID رو مقدار ندادیم تا خود Sqlite مقدار اون رو از یک هر دفعه اضافه کنه به صورت اتوماتیک ( اگر مقدار ستون primary key تکراری باشه خطا میگیرید )
کار با دستورات UPDATE و DELETE رو توی این پست میتونید مشاهده کنید
-------------------------------------------------------------------------------------------------------------------
خواندن اطلاعات از دیتابیس
حالا میخوایم اطلاعات رو از جدول بخونیم
برای این کار از یک شیء Cursor استفاده میکنیم که اطلاعات جدول رو داخل خودش نگه میداره
ابتدا باید قسمت های مورد نیاز از جدول رو داخل Cursor بریزیم
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE, null);
ما تو این کد با * تمام ستون های جدول رو به ترتیب داخل cursor ریختیم
در صورت نیاز میتونید فقط چند ستون رو انتخاب کنید تا کارتون راحت تر باشه
و میتونید ردیف هایی رو انتخاب کنید که یک شرط خاص رو داشته باشند ( مثلا دانشجویان با معدل بالای 16 )
اینا رو اگر نمیدونید یا برید دنبالش بگردید ، یا بپرسید براتون مثال بزنم ، چون به SQL ربط داره نه اندروید
خب حالا اطلاعات بدست اومده توی Cursor رو میشه به این ترتیب از اول تا آخر استفاده کرد
مثلا ما این اطلاعات رو داخل آرایه میذاریم، یا میشه اطلاعات رو توی textView نمایش داد ( این دست خود شماست )
فقط حواستون باشه اگر از آرایه استفاده کردید قبلش آرایه رو بر اساس تعداد سطرهای cursor دوباره سازی کنید، مثل کد زیر
NAME = new String[allrows.getCount()];
و ریختن اطلاعات توی آرایه :
int i = 0;
if(allrows.moveToFirst()){
do{
ID[i] = allrows.getInt(0);
NAME[i] = allrows.getString(1);
PLACE[i] = allrows.getString(2);
i++;
}
while(allrows.moveToNext());
}
allrows.close();
mydb.close();
بعد از خوندن اطلاعات از cursor هم باید حتما اون رو مثل دیتابیس بندید
اطلاعاتی رو که داخل آرایه ریختین میتونید به آداپتر لیست ویو یا گرید ویو بفرستید و در اونجا نمایش بدین
خب تبریک میگم شما یاد گرفتید خیلی ساده اطلاعات رو در دیتابیس ذخیره کنید و از دیتابیس بخونید
اگر نیاز به توضیح بود در خدمتم
دکمه تشکر هم که اون پایین هست دیگه :لبخند:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
البته یه راه ساده هم برای کار با دیتابیس آماده هست که استفاده از لایبری sqlite asset helper است
https://github.com/jgilfelt/android-sqlite-asset-helper
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
حامد جان والا کلاس و لایبری که هست ، ولی فقط هست :لبخند:
میگم من هنوز نتونستم ارتباط خوبی برقرار کنم ، چون برام راحت نیست
بیشتر راحتم خودم چیزی که نیازم هست رو کد بنویسم ، بازم اگه این کلاس ها و لایبری ها یک آموزش استفاده خوب داشته باشه استقبال میکنیم ، نه اینکه لینک باشه :چشمک:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
خوب اینقدر آسونه که فکر میکنم نیاز به آموزش نداشته باشه (البته در صفحه برنامه آموزش انگلیسیش هست)
فایل jar را تو پوشه libs برنامه کپی میکنید
بعد همانند اکتیویتی mydatabase نام تیبل و ستون ها را معرفی میکنید
همین
راستی من شنیدم برای آپدیت برنامه باید برنامه ورژن قبل که دیتابیس قبلی توش هست را پاک کرد و برنامه جدیدتر رانصب کرد تا دیتابیس تغییر کنه اما تو این لایبری اصلا نیاز نیست (تو مثال هاش هم مثال آپدیت دیتابیس وجود داره)
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام
الان روش ساده ای که شما گفتین زیاد فرقی نداره ها فقط دسترسی بهش مشکل تر میشه همین:اشتباه:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
abbasalim
سلام
الان روش ساده ای که شما گفتین زیاد فرقی نداره ها فقط دسترسی بهش مشکل تر میشه همین:اشتباه:
فرقش اینه که فهمش ساده تره
واسه کسایی که با دیتابیس آشنایی ندارن خوبه
حالا بعدش که آشنا شدن ، منم توصیه میکنم اصولی و مرتب از کلاس ها استفاده کنن :)
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من نمی دونم شماها چرا خودتون رو به مشکل میندازین !
از کلاس SQLiteDatabase و Cursor استفاده کن و نیازی به این DBHelper ها نیست.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اهمیت استفاده از این لایبری اینه که لازم نیست برنامه قبلی را پاک کنیم که دیتابیس جدید تاثیر داشته باشه
خواسیتن sample های این برنامه را دانلود کنید
آیا این روش که همه میگن همین طوره یا برای ورژن جدید دیتابیس باید برنامه قبلی را پاک کنیم؟
-
کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
آموزش کار با دیتابیس آماده 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);
setForcedUpgrade();
}
}
توی کلاسی که ایجاد کردین اسم دیتابیس خودتون رو با پسوند db وارد کنین
بعدش توی اکتیویتی توی متغیرهای عمومی یک نمونه از این کلاس تعریف کنید، به این صورت :
private MyDatabase MyDataBase;
و بعد توی متد onCreate این خط کد رو بنویسین :
MyDataBase = new MyDatabase(this);
حالا هر جایی که خواستین دیتابیس رو باز کنین، میتونین از دو تا حالت getWritableDatabase() و getReadableDatabase() که برای خوندن و نوشتن هست استفاده کنین
به صورت زیر مثلا :
mydb = MyDataBase.getReadableDatabase();
وقتی getReadableDatabase استفاده میکنید، فقط عملیات خواندن رو میتونید انجام بدید
پس برای نوشتن یا آپدیت و دیلت باید از getWritableDatabase استفاده کنید
به همین سادگی، فقط باید تمام این مراحل رو به ترتیب و همینطور که گفتم انجام بدید که به مشکل نخورید
( zip کردن دیتابیس برای اینه که توی اندروید 10 به پایین خطا نگیرید )
آموزش کار با دیتابیس ( خواندن، نوشتن، آپدیت و دیلت ) توی همین تاپیک قرار داده شده
لطفا بعد از مطالعه درصورت وجود مشکل سوال بپرسید در خدمتم
----------------------------------------------------------------------------------------------
برای آپدیت کردن اطلاعات دیتابیس آماده به این پست مراجعه کنید
اگر مفید واقع شد، دکمه تشکر این پایینه :لبخند:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
برای update و delete همون دستورات SQL استفاده میشه
به این صورت آپدیت میکنیم :
mydb.execSQL("update tableName set fieldName = 'value' where _id = 2");
با این دستور توی جدول tableName، مقدار ستون یا فیلد fieldName رو در جایی که id_ برابر 2 باشه، به value تغییر میدیم
اگه براش شرط نذارین مقدار fieldName تمام رکوردهاتون رو آپدیت میکنه
مثلا دستور زیر نمره همه دانشجوها رو 20 میکنه !!!
mydb.execSQL("update student set mark=20);
دستور delete هم به همین شکل عمل میکنه ، اگه شرط بذارین براش فقط رکوردهایی که اون شرط رو دارن پاک میکنه ، اگه شرط نذارین کل رکوردهای جدول رو پاک میکنه
mydb.execSQL("delete tableName where _id > 40);
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
تشکر فراوان و ممنون که تجربیاتتون رو در اختیار بقیه گذاشتید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دمت گرم poorman جان که این موضوع را دنبال کردی و توضیحات کاملی برای هممون گذاشتی
من مزیت و راحتی این لایبری را تو همین تالار در چند تا تاپیک دیگه مطرح کردم اما این طور که مشخص بود کسی زیاد علاقه به استفاده از این لایبری را نداشت و از همان روش معمول استفاده میکردند.
واقعا دستت درد نکنه
..
میگم بیکار شدی یه پروژه آموزشی درباره این لایبری و آپدیت جدید بساز و در نمونه برنامه های کوچک اما مفید قرار بده که بقیه استفاده کنند.
یا اصلا همون sample های لایبری را با اضافه کردن چند تا کامنت فارسی در پروژه برای فهم بیشتر در تاپیک نمونه برنامه ها قرار بده
البته اگه حال داشتی و وقت داشتی
بازم دمت گرم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamedjj
دمت گرم
poorman جان که این موضوع را دنبال کردی و توضیحات کاملی برای هممون گذاشتی
من مزیت و راحتی این لایبری را تو همین تالار در چند تا تاپیک دیگه مطرح کردم اما این طور که مشخص بود کسی زیاد علاقه به استفاده از این لایبری را نداشت و از همان روش معمول استفاده میکردند.
واقعا دستت درد نکنه
..
میگم بیکار شدی یه پروژه آموزشی درباره این لایبری و آپدیت جدید بساز و در نمونه برنامه های کوچک اما مفید قرار بده که بقیه استفاده کنند.
یا اصلا همون sample های لایبری را با اضافه کردن چند تا کامنت فارسی در پروژه برای فهم بیشتر در تاپیک نمونه برنامه ها قرار بده
البته اگه حال داشتی و وقت داشتی
بازم دمت گرم
خواهش میکنم ، دم تو گرم که انقد گفتی تا بالاخره من رفتم سراغش :قهقهه:
من کلا وقتی 2-3 روز دنبال یه چیزی بگردم و پیداش نکنم بعد آخرش راه حل رو که بفهمم انقد ذوق دارم که میام واسه بقیه هم آموزش میذارم :لبخند:
والا با آپدیت جدید که کار نکردم ولی فک نکنم چیز خاصی باشه ، توی همون کلاس MyDatabase کافیه DATABASE_VERSION رو یکی ببری بالا، اینطور که فهمیدم خودش بقیه کارا رو میکنه دیگه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ببخشید من تازه واردم
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('یک دو سه','امتحان')");
mydb.close();
اگه بخوام به جای Value ثابت مقادیر رو از txtview بگیرم چه جوری میشه ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام روش ویزادی موجود نیس؟
همانند برنامه ای دات نت؟؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
keyvan_s89
ببخشید من تازه واردم
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('یک دو سه','امتحان')");
mydb.close();
اگه بخوام به جای Value ثابت مقادیر رو از txtview بگیرم چه جوری میشه ؟
سلام، برای وارد کردن اطلاعات از EditText میتونید به صورت زیر عمل کنید
String name = editTextName.getText().toString();
String place = editTextPlace.getText().toString();
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES ('" + name + "', '" + place + "')");
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hojjjat
سلام روش ویزادی موجود نیس؟
همانند برنامه ای دات نت؟؟
سلام، برای ساخت دیتابیس که خب نرم افزار هست
اما برای استفاده از دیتابیس همش برمیگرده به کد نویسی یا استفاده از کلاس ها و لایبری ها
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
سلام، برای وارد کردن اطلاعات از EditText میتونید به صورت زیر عمل کنید
String name = editTextName.getText().toString();
String place = editTextPlace.getText().toString();
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES ('" + name + "', '" + place + "')");
اپدیت و دلیت رو هم اگه یه مثال کوچولو بزنید ممنون میشم. و این که چه جوری اطلاعات خونده شده رو بریزیم تویه یه لیست ویو
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلاممن تازه دارم اندرويد ياد ميگيرم ميخوام يه برنامه اندرويدي با کد نويسي بنويسم که جزوه درس انگليسمون است,مشکلي که دارم نميدونم چه جوري بايد متن اين جزورو وارد برنامه کنم لطفا کمک کنيد.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
keyvan_s89
اپدیت و دلیت رو هم اگه یه مثال کوچولو بزنید ممنون میشم. و این که چه جوری اطلاعات خونده شده رو بریزیم تویه یه لیست ویو
برای آپدیت و دیلت کردن هم دقیقا کار به همین صورته دیگه، الگو برداری کنید راحته قضیه
String value = editTextValue.getText().toString();
int id = editTextID.getText();
mydb.execSQL("update tableName set fieldName = '" + value + "' where _id = " + id);
برای ریختن اطلاعات توی لیست ویو هم وقتی اطلاعات رو ریختید توی آرایه، بعدش آرایه ها رو میفرستید به آداپتر لیست ویو و نمایش میدید که آموزش این مبحث دیگه به موضوع تاپیک مربوط نیست
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamidhtc
سلاممن تازه دارم اندرويد ياد ميگيرم ميخوام يه برنامه اندرويدي با کد نويسي بنويسم که جزوه درس انگليسمون است,مشکلي که دارم نميدونم چه جوري بايد متن اين جزورو وارد برنامه کنم لطفا کمک کنيد.
شما اول یک شناخت کلی از دیتابیس SQLite پیدا کنین که چطوری اطلاعات دسته بندی میشه و میشه اونها رو خوند
بعدش برای اینکه بعدا بتونین بهترین استفاده رو از دیتابیس کنین، برای اطلاعاتتون یک چارچوب مشخص تعیین کنین و بعدش اونا رو از طریق نرم افزار SQLite Browser وارد دیتابیس خودتون کنین
مثلا اگه میخواین لغات رو ترجمه کنین، یک جدول به اسم dictionary بسازید و چند تا ستون id_ و word و meaning رو بسازید و اطلاعاتتون رو از طریق دستورهای SQL وارد دیتابیس کنید
بعد که دیتابیستون آماده شد، میاین توی این تاپیک و آموزش مربوط به استفاده از دیتابیس آماده و کار با دیتابیس رو میخونین
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamedjj
میگم بیکار شدی یه پروژه آموزشی درباره این لایبری و آپدیت جدید بساز و در نمونه برنامه های کوچک اما مفید قرار بده که بقیه استفاده کنند.
یا اصلا همون sample های لایبری را با اضافه کردن چند تا کامنت فارسی در پروژه برای فهم بیشتر در تاپیک نمونه برنامه ها قرار بده
حامد جان من رفتم بحث آپدیت رو خوندم ، آپدیت توی این لایبری دو تا حالت داره
یکی اینکه میخواین اطلاعاتی که کاربر وارد دیتابیس کرده از دست نره و برای اینکار باید یکسری مراحل رو طی کرد تا اطلاعات قبلی توی دیتابیس جدید وارد بشه
این کار رو من امتحان نکردم ، و اطلاع زیادی هم ندارم ولی اینجا توضیح داده
مورد بعدی اینه که شما براتون مهم نیست کاربر اطلاعات قبلیش چی بوده، یا اصلا کاربر با دیتابیس کاری نداشته و چیزی توش وارد نکرده
که برای اینکار کافیه عدد ورژن دیتابیس رو توی کلاس MyDatabase یکی ببرید بالا و توی همون کلاس توی تابع MyDatabase بعد از متد super این کد رو بنویسید
setForcedUpgrade();
اینطوری به صورت خودکار دیتابیس قبلی پاک میشه و دیتابیس جدید جایگزین میشه
البته کاملا معلومه که فایل دیتابیس موجود در پوشه assets/databases هم باید با فایل جدید جایگزین بشه ( با همون نام قبلی )
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
جناب poorman واقعا ممنون خیلی بدردم خورد
یه سوال داشتم . چطوری مشیه count رو بدست آورد ؟ چون آرایه ها باید به صورت پویا تعریف بشه دیگه.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ho3ein.3ven
جناب poorman واقعا ممنون خیلی بدردم خورد
یه سوال داشتم . چطوری مشیه count رو بدست آورد ؟ چون آرایه ها باید به صورت پویا تعریف بشه دیگه.
درسته چون باید آرایه ها رو پویا مقدار بدید می تونید از تابع getCount استفاده کنید برای Cursor
int num = yourCursor.getCount();
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
خیلی ممنون بابت جوابتون.
ببخشید باز مزاحم شدم .
تو این روشی که گفتین کپی کردن دیتابیس آماده به چه صورتی هست ؟ اگه ممکنه یکم توضیح بدین .
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
خواهش میکنم، کپی کردن منظورتون چیه ؟ فایل دیتابیس رو زیپ میکنید با همون مراحلی که گفتم بعدش فایل رو میکشید و توی پوشه assets/databases ول میکنید
بعدش برای اینکه دیتابیس شناخته بشه باید از لایبری SQLite asset helper استفاده کنین به ترتیبی که گفته شد
-
ترکیب دو دیتابیس SQLite با هم !!!
سلام دوستان
من میخواستم دیتابیس دو تا از برنامه هام رو با هم ترکیب کنم، مسلما زمان زیادی میبرد تا بخوام یکی یکی جدول ها رو توی دیتابیس جدید ایجاد کنم و باز دوباره اطلاعات رو وارد کنم
توی اینترنت گشتم اما راهی که به درد بخوره پیدا نکردم
آخر سر یه راهکار اتفاقی یا ابتکاری پیدا کردم و مشکلم رو حل کردم که گفتم اینجا بگم شاید به درد کسی دیگه هم بخوره
مواد مورد نیاز :لبخند: : SQLite Database Browser , Microsoft SQL Server
نکته : اگه Microsoft SQL Server روی سیستمتون نصب نیست به نظر من بیخیال بشین :بامزه: چون حجمش 4 گیگ میشه تقریبا
ابتدا دیتابیسی رو که میخواین به دیتابیس اصلی اضافه کنین با نرم افزار SQLite Browser باز میکنید
بعدش از منوی file گزینه export رو انتخاب میکنید و بعد Database to SQL file
حالا فایل رو درجای دلخواه با پسوند .sql ذخیره کنید
بعدش برید جایی که فایل رو ذخیره کردید و اون رو با Microsoft SQL Server باز کنید
می بینید که یک سری کوئری و دستورات SQL براتون اورد
حالا تمام اطلاعات در اختیار شماست و میتونید با SQLite Browser دیتابیس اصلی رو باز کنید و این کوئری ها و دستورات رو اونجا کپی کنید و بعد execute کنید ( از قسمت Execute SQL )
حتی جدول رو هم نمیخواد بسازید و دستور ساخت جدول توی همون کوئری ها وجود داره
اطلاعات رو که وارد کردید، بعدش میتونید با ابزارهای SQLite Browser هر بلا و تغییری که خواستید سرشون در بیارید
امیدوارم توضیحاتم کامل و مفید باشه :لبخندساده:
-
نقل قول: ترکیب دو دیتابیس SQLite با هم !!!
نقل قول:
نوشته شده توسط
poorman
سلام دوستان
من میخواستم دیتابیس دو تا از برنامه هام رو با هم ترکیب کنم، مسلما زمان زیادی میبرد تا بخوام یکی یکی جدول ها رو توی دیتابیس جدید ایجاد کنم و باز دوباره اطلاعات رو وارد کنم
توی اینترنت گشتم اما راهی که به درد بخوره پیدا نکردم
آخر سر یه راهکار اتفاقی یا ابتکاری پیدا کردم و مشکلم رو حل کردم که گفتم اینجا بگم شاید به درد کسی دیگه هم بخوره
مواد مورد نیاز:لبخند: : SQLite Database Browser , Microsoft SQL Server
نکته : اگه Microsoft SQL Server روی سیستمتون نصب نیست به نظر من بیخیال بشین :بامزه: چون حجمش 4 گیگ میشه تقریبا
ابتدا دیتابیسی رو که میخواین به دیتابیس اصلی اضافه کنین با نرم افزار SQLite Browser باز میکنید
بعدش از منوی file گزینه export رو انتخاب میکنید و بعد Database to SQL file
حالا فایل رو درجای دلخواه با پسوند .sql ذخیره کنید
بعدش برید جایی که فایل رو ذخیره کردید و اون رو با Microsoft SQL Server باز کنید
می بینید که یک سری کوئری و دستورات SQL براتون اورد
حالا تمام اطلاعات در اختیار شماست و میتونید با SQLite Browser دیتابیس اصلی رو باز کنید و این کوئری ها و دستورات رو اونجا کپی کنید و بعد execute کنید ( از قسمت Execute SQL )
حتی جدول رو هم نمیخواد بسازید و دستور ساخت جدول توی همون کوئری ها وجود داره
اطلاعات رو که وارد کردید، بعدش میتونید با ابزارهای SQLite Browser هر بلا و تغییری که خواستید سرشون در بیارید
امیدوارم توضیحاتم کامل و مفید باشه :لبخندساده:
چرا لقمه رو می پیچونی می زاری دهنت ؟ :لبخند:
تو SQLite با همچین چیزی می تونی این کار رو بکنی.
یک کپی از Structure جدول اولی بنویس و بعد query زیر رو بزن
INSERT INTO test1(`id`,`name`) SELECT `id`,`name` FROM test
مثلا با Navicat می تونی کپی و پیست هم بکنی.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
الان یا من منظور رو متوجه نشدم یا شما منظور منو :لبخند:
چون دو تا دیتابیس رو نمیشه همزمان توی SQLite باز کرد و مسلما نمیشه اطلاعات رو به همین راحتی با یک کوئری منتقل کرد
الان اینکه میگی یک کپی از stucture جدول اول بگیرم یعنی چی ؟؟؟ چطوری اینکارو بکنم ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
الان یا من منظور رو متوجه نشدم یا شما منظور منو :لبخند:
چون دو تا دیتابیس رو نمیشه همزمان توی SQLite باز کرد و مسلما نمیشه اطلاعات رو به همین راحتی با یک کوئری منتقل کرد
الان اینکه میگی یک کپی از stucture جدول اول بگیرم یعنی چی ؟؟؟ چطوری اینکارو بکنم ؟
دو تا دیتابیس که سهل هستش، هر چند تا که بخوای می تونی باز کنی فرض کن 10 تا.
گرفتن Strcuture هم همون گرفتن dump از table هستش یا همون export.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام دوستان
بعد از آپدیت نرم افزار به خوبی نصب میشه یعنی ارور نمیده؟؟؟ چون تو بعضی جاها گفتن استفاده از دیتابیس آماده باعث میشه تو آپدیت نرم افزار با ارور مواجه میشین...
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آپدیت دو تا حالت داره یکی اینکه دیتابیس بخواد پاک بشه و نسخه جدید جایگزین شه، یکی اینکه اطلاعات جدید به دیتابیس قبلی اضافه بشه
مورد اول رو که من تست کردم هیچ مشکلی پیش نمیاد، مورد دوم والا هنوز امتحان نکردم، ولی با توجه به قدرتی که لایبری SQL asset helper داره فک نمیکنم اگر همه کارها رو درست انجام بدید مشکلی پیش بیاد
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
آپدیت دو تا حالت داره یکی اینکه دیتابیس بخواد پاک بشه و نسخه جدید جایگزین شه، یکی اینکه اطلاعات جدید به دیتابیس قبلی اضافه بشه
مورد اول رو که من تست کردم هیچ مشکلی پیش نمیاد، مورد دوم والا هنوز امتحان نکردم، ولی با توجه به قدرتی که لایبری SQL asset helper داره فک نمیکنم اگر همه کارها رو درست انجام بدید مشکلی پیش بیاد
کافیه واسه دیتابیس نسخه تعریف کنی بعد اگه تغییراتی در اطلاعات داخلی دیتابیس داشته باشه نسخه جدید دیتابیس رو 1+قبلی کنی بعد با دستورات مثل alter table و ... مدیریت کنی
من به اینصورت استفاده می کنم خیلی هم راحته و جواب میشه البته بایستی به دستورات SQL اشنایی خوبی داشته باشید اینطوری حتی اطلاعات قبلی هم حذف نمیشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من این مراحل انجام دادم فقط نمی دونم از کوئری select چجوری استفاده کنم یعنی مثلا textview برابر فیلد مورد نظر از بانک شود
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
poorman
بالاخره من دیشب تونستم تمام مشکلات مربوط به دیتابیس آماده رو حل کنم و ارتباط خوبی برقرار کنم با لایبری
sqlite asset helper ( با تشکر از hamedjj به خاطر پافشاری روی استفاده از این لایبری )
ولی خب استفاده از این لایبری هم یکم برام گیج کننده بود که خدا رو شکر تونستم آخرش راه بندازمش
من یه توضیح میدم واسه کسایی که میخوان با دیتابیس آماده کار کنن و مثل من به مشکل خوردن
انصافا استفاده از sqlite asset helper راحته و بسیار کارا
یکی از مشکلاتی که من برخورد کردم توی استفاده از کلاس های دیگه، این بود که توی اندروید 10 به پایین دیتابیس رو ایجاد نمیکرد ولی این لایبری مشکل رو حل کرد
خب دوستانی که با اکلیپس کار میکنن این فایل jar رو دانلود کنن و توی پروژه مورد نظر در پوشه libs قرار بدن
http://repository.sonatype.org/servi...=LATEST&&c=jar
توی پوشه assets یک پوشه به اسم databases بسازید
بعد دیتابیس خودتون رو zip کنید و با این فرمت ( DataBaseName.db.zip ) توی پوشه databases بذارید ( دقت کنید باید هم پسوند 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();
به همین سادگی، فقط باید تمام این مراحل رو به ترتیب و همینطور که گفتم انجام بدید که به مشکل نخورید
( zip کردن دیتابیس برای اینه که توی اندروید 10 به پایین خطا نگیرید )
اگر مفید واقع شد، دکمه تشکر این پایینه :لبخند:
من این مراحل انجام دادم فقط نمی دونم از کوئری select چجوری استفاده کنم یعنی مثلا textview برابر فیلد مورد نظر از بانک شود
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من از لایبری sqlite asset helper استفاده میکنم که تو table خودم یه ستون به نام favorite دارم برای لیست علاقه مندی ها
مقادیر این table همه no هستند که میخوام باید با کلیک رو دکمه افزودن به yes تبدیل شود
برای اجرای این عمل باید چیکار کنم؟؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام.
وقتی که از
mydb = MyDatabase.getReadableDatabase();
در کدهام استفاده میکنم برنامه موقع اجرا خطا میده.
میتونید کمکم کنید؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من هم وقتی اجرا می کنم میگه نمیتونه دیتابیس رو بخونه....
مشکل حل شد یادم رفت پوشه databases رو بسازم...:لبخند:
---------------------------------------------------------------------------------------
دوستان حالا ما یکه دیتابیس داریم خوب...
- چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟:متفکر:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام.
وقتی که از
mydb = MyDatabase.getReadableDatabase();
در کدهام استفاده میکنم برنامه موقع اجرا خطا میده.
میتونید کمکم کنید؟
دیتابیس را باید تو پوشه databases و سپس تو پوشه asset قرار بدی
شما این کار را کردید؟
کسی نیست سوال منو جواب بده؟؟؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamedjj
دیتابیس را باید تو پوشه databases و سپس تو پوشه asset قرار بدی
شما این کار را کردید؟
کسی نیست سوال منو جواب بده؟؟؟
من کاملا مطابق با آموزش پیش رفتم.
اما کار نمیکنه!!!
-
نقل قول: کار با دیتابیس آماده به آسانی با استفاده از لایبری sqlite asset helper
نقل قول:
نوشته شده توسط
akbar_online
من این مراحل انجام دادم فقط نمی دونم از کوئری select چجوری استفاده کنم یعنی مثلا textview برابر فیلد مورد نظر از بانک شود
شما به پست اول مراجعه کنید
اونجا قشنگ کار با دیتابیس و کوئری select توضیح داده شده
از cursor استفاده میکنید و اطلاعات رو داخلش میریزید و بعد هر قسمتی که خواستید رو میتونید به عنوان text بذارید یا توی آرایه یا هر چیز دیگه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
hamedjj
من از لایبری sqlite asset helper استفاده میکنم که تو table خودم یه ستون به نام favorite دارم برای لیست علاقه مندی ها
مقادیر این table همه no هستند که میخوام باید با کلیک رو دکمه افزودن به yes تبدیل شود
برای اجرای این عمل باید چیکار کنم؟؟
حامد جان ببخشید من نبودم
برای این کار شما دیتابیس رو باید از نوع writable بگیرید به جای readable و بقیه کار مشابه قبل هست
یعنی شما با کد mydb.execsql میتونید هر کوئری رو روی دیتابیس اعمال کنی ( چون دیتابیس رو از نوع نوشتنی گرفتید، فقط کارهای نوشتنی )
mydb = MyDataBase.getWritableDatabase();
mydb.execSQL("update table set column = 'yes' where id = 1");
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام.
وقتی که از
mydb = MyDatabase.getReadableDatabase();
در کدهام استفاده میکنم برنامه موقع اجرا خطا میده.
میتونید کمکم کنید؟
سلام
چند تا احتمال وجود داره، یکی اینکه شما دارید یک عمل اجرایی انجام میدین درحالی که دیتابیستون رو از نوع readable گرفتید، پس اگر میخواین کاری روی دیتابیس اجرا بشه باید writable باشه
احتمال دیگه اینکه شما قبل از مقدار دادن متغیر mydb تون MyDatabase رو مقدار ندادین ( MyDataBase = new MyDatabase(context); )
احتمالات دیگه هم میشه در نظر گرفت ولی باید پیام خطایی که میده رو بذارید، شاید کلا کوئری شما مشکل داره
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
من هم وقتی اجرا می کنم میگه نمیتونه دیتابیس رو بخونه....
مشکل حل شد یامدم رفت پوشه databases رو بسازم...:لبخند:
---------------------------------------------------------------------------------------
دوستان حالا ما یکه دیتابیس داریم خوب...
- چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟:متفکر:
اطلاعات رو با cursor از دیتابیس بخونید
توی پست اول نمونه کار با دیتابیس و کوئری select و insert وجود داره، توی پست های بعدی هم update و delete
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوستان چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟
میشه یه مثال بزارید؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
دوستان چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟
میشه یه مثال بزارید؟
من داشتم به ترتیب جواب سوالات رو میدادم :لبخند: شما یکم عجله کردی
جوابتون توی پست قبل هستش
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اگه دیتابیس بسته است باید باز کنید بعد با استفاده از دستور زیر
Cursor cursor= db.rawQuery("select name from db", null);
cursor.moveToFirst();
String txt= cursor.getString(cursor.getColumnIndex("name"));
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
دوستان چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟
میشه یه مثال بزارید؟
تو نمونه برنامه ها یه پروژه آموزشی هست که از این لایبری استفاده شده
https://barnamenevis.org/showthread.p...=1#post1977385
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
saeed_g21
کافیه واسه دیتابیس نسخه تعریف کنی بعد اگه تغییراتی در اطلاعات داخلی دیتابیس داشته باشه نسخه جدید دیتابیس رو 1+قبلی کنی بعد با دستورات مثل alter table و ... مدیریت کنی
من به اینصورت استفاده می کنم خیلی هم راحته و جواب میشه البته بایستی به دستورات SQL اشنایی خوبی داشته باشید اینطوری حتی اطلاعات قبلی هم حذف نمیشه
میشه کد بزارید؟
------------------------------------------------------------------------
با توضیح زیر مشکل حل شد.
مورد بعدی اینه که شما براتون مهم نیست کاربر اطلاعات قبلیش چی بوده، یا اصلا کاربر با دیتابیس کاری نداشته و چیزی توش وارد نکرده
که برای اینکار کافیه عدد ورژن دیتابیس رو توی کلاس MyDatabase یکی ببرید بالا و توی همون کلاس توی تابع MyDatabase بعد از متد super این کد رو بنویسید
setForcedUpgrade();
اینطوری به صورت خودکار دیتابیس قبلی پاک میشه و دیتابیس جدید جایگزین میشه
------------------------------------------------------------------------
دوستان کسی نمیدونه در این روش چگونه اطلاعات رو به صورت راندوم از دیتابیس بگیریم؟
مثلا من 5 تا داده دارم و میخوام با با کلیک بر روی دکمه یکی از این داده ها توی یک TextView نمایش داده بشه.:متفکر: