PDA

View Full Version : اضافه کردن یک Table جدید به دیتابیس



slr560
پنج شنبه 02 مرداد 1393, 13:52 عصر
سلام دوستان
من نیاز دارم یه تیبل جدید اضافه کنم به دیتابیسم. به شکل زیر



food
date
days
_id


چلو کباب
۹۳/۵/۲۸
شنبه
0


قیمه
۹۳/۵/۲۹
یکشنیه
1


غذا
۹۳/۵/۳۰
دوشنبه
2


غذا
۹۳/۴/۳۱
سه شنبه
3


غذا
۹۳/۵/۱
چهارشنبه
4


غذا
۹۳/۵/۲
پنجشنبه
5


غذا
۹۳/۵/۳
جمعه
6




چنتا سوال پیش میاد.

۱- تاریخ هارو به چه شکلی اضافه کنم که اتوماتیک خودش تو دیتابیس قرار بگیره.؟ بر اساس تاریخ شمسی
۲- مثلا این هفته تموم شد و رفتیم ردیف ۷ . میخوام از دوباره تو ستون days روز شنبه بخوره .چجوری پیاده سازیش کنم؟

slr560
پنج شنبه 02 مرداد 1393, 18:34 عصر
از دوستان کسی هست راهنمایی کنه؟

poorman
پنج شنبه 02 مرداد 1393, 21:33 عصر
سلام

شما توضیح ندادید که پر شدن این جدول به چه صورت هست، مثلا قراره سفارش بگیره یا قراره برنامه غذایی ثبت کنه ؟ یا اینکه خودتون از قبل میخواین جدول رو آماده کنین.

آیا امکان داره روزی توی دیتابیس ثبت نشه و روزها به ترتیب نباشن؟ یا همه روزها بلا استثنا توی جدول ذخیره میشن ؟

slr560
پنج شنبه 02 مرداد 1393, 21:46 عصر
سلام

شما توضیح ندادید که پر شدن این جدول به چه صورت هست، مثلا قراره سفارش بگیره یا قراره برنامه غذایی ثبت کنه ؟ یا اینکه خودتون از قبل میخواین جدول رو آماده کنین.

آیا امکان داره روزی توی دیتابیس ثبت نشه و روزها به ترتیب نباشن؟ یا همه روزها بلا استثنا توی جدول ذخیره میشن ؟

ممنون از جوابتون . برای پروژه دانشجویی ٬ خودم فیلد ها رو پر میکنم. و نیازی به پر کردن اتومانیک نیس . فقط میخوام روند کار برای آینده رو بدونم .
در اصل این جدول از طرف یه سرور SQL پر میشه . (در آینده)
روند کار اینجوری هست که این جدول از طریق یه وب سرویس پر میشه و محتویات ۱ هفته از شنبه تا جمعه رو نشون میده . کاربر بعد از مشاهده٬ غذا رو برای روزهایی که تو جدول هست ثبت و رزرو میکنه.
توی دیتابیس روز ها پشت سر هم هستن و به ترتیب اضافه میشن.(بر اساس تاریخ شمسی)

طراحی جدول من به نظرتون صحیحه؟

poorman
پنج شنبه 02 مرداد 1393, 22:51 عصر
طراحی جدولتون مشکل خاصی نداره، فقط طرف وقتی رزرو کرد کجا مشخص میکنه ؟؟؟

به نظرتون نباید یک فیلد باشه که مشخص کنه امروز رزرو شده یا نه ؟

اگر میگید از قبل جدول رو پر میکنید پس دیگه این دست خودتونه که تاریخ و روز رو وارد کنید
چون این کار رو دستی انجام میدید راه خاصی برای پر کردن جدول نداره، مگر اینکه یک برنامه جانبی بسازید برای پر کردنش

در آینده هم وقتی میخواین از وب سرویس بگیرید لیست غذاها رو، بهتره یک جدول برای غذا داشته باشید و داخل این جدول رزرو فقط آیدی غذا رو بیارید

دیگه نمیدونم دقیقا چه مشکلی دارید

slr560
پنج شنبه 02 مرداد 1393, 22:55 عصر
طراحی جدولتون مشکل خاصی نداره، فقط طرف وقتی رزرو کرد کجا مشخص میکنه ؟؟؟

به نظرتون نباید یک فیلد باشه که مشخص کنه امروز رزرو شده یا نه ؟

اگر میگید از قبل جدول رو پر میکنید پس دیگه این دست خودتونه که تاریخ و روز رو وارد کنید
چون این کار رو دستی انجام میدید راه خاصی برای پر کردن جدول نداره، مگر اینکه یک برنامه جانبی بسازید برای پر کردنش

در آینده هم وقتی میخواین از وب سرویس بگیرید لیست غذاها رو، بهتره یک جدول برای غذا داشته باشید و داخل این جدول رزرو فقط آیدی غذا رو بیارید

دیگه نمیدونم دقیقا چه مشکلی دارید

اره مرسی ستون رزروم اضافه میکنم
تاریخ هارو چیکار کنم؟ موقعی که از وب سرویس میگیره اطلاعات رو

poorman
پنج شنبه 02 مرداد 1393, 23:12 عصر
تاریخ رو یا میتونید به صورت تاریخ شمسی از وب سرویس بگیرید، یا تاریخ میلادی بگیرید خودتون تبدیل به شمسی کنید

روز رو هم یا میتونید یک عدد از 0 تا 6 بگیرید و تبدیل به روز کنید یا اینکه روز رو براساس همون تاریخی که از سرور میگیرید محاسبه کنید که چند شنبه ست، دقیق نمیدونم ولی فکر میکنم توابعش باشه

slr560
شنبه 04 مرداد 1393, 05:28 صبح
آقا تیبل به این صورت تغییر کرد



food
day
date
reserve
_id


قرمه
شنبه
23/5/2014
0
0


کوبیده
یکشنبه
24/5/2014
0
1


غذا
دوشنبه
25/5/2014
0
2


غذا
سه شنبه
26/5/2014
0
3


غذا
چهارشنبه
27/5/2014
0
4


غذا
پنجشنبه
28/5/2014
0
5


غذا
جمعه
29/5/2014
0
6



اطلاعات به درستی با دستور insert وارد جدول میشه و پر میشه
تو یه جایی از برنامم فقط ۲ تا ستون date و food رو میخوام و باید از جدول بخونم.
با این دستور اطلاعات رو میگیرم .

public Cursor getFoods() {
return db.query(DATABASE_TABLE_FOOD,new String[]{"date","food"},null,null,null,null,null);
}

کرسر که برمیگرده فقط میتونم با cursor.getString مقدار 0 و 1 رو برگدونم. یعنی وقتی میزنم cursor.getString(3) برنامه کرش میکنه
فکر کنم فقط سطر اول رو برمیگردونه
اشکال query من چیه که کل سطرها رو برنمیگردونه؟

poorman
شنبه 04 مرداد 1393, 05:44 صبح
شما دارید 2 تا ستون رو select میکنید بنابراین فقط میتونید اطلاعات همون دو ستون رو از cursor بگیرید که میشه ستون 0 و ستون 1 به ترتیب

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

slr560
شنبه 04 مرداد 1393, 11:39 صبح
میدونم دوست من . من می خوام سطر های این ۲ ستون رو بگیرم
مثلا سطر ۲ سطر ۳ و تا آخر..
نمیدونم چجوری باید اطلاعات سطر های پایین تر رو بگیرم. فقط سطر ۱ رو بهم میده. اطلاعاتی که تو عکس پایین دورش خط کشیدم رو میخوام

121568

slr560
شنبه 04 مرداد 1393, 18:36 عصر
کسی نظری نداره؟

slr560
شنبه 04 مرداد 1393, 19:43 عصر
فهمیدم دوستان .
باید بعد از گرفتن هر سطر تابع moveToNext رو فراخوانی میکردم

حالا تا اینجا گرفتم اطلاعات رو کرسر. اومدم به تابع نوشتم به صورت زیر:


private String[][] fromCursorToString(Cursor cursor) {
String[][] result = new String[cursor.getCount()][cursor.getCount()];

do {
String rowDate = cursor.getString(0);
String rowFood = cursor.getString(1);

} while (cursor.moveToNext());

return result;
}


یه آرایه ۲بعدی استرینگ تعریف کردم. مشکلم اینجاس که این آرایه رو چجوری با rowDate و rowFood پر کنم؟
یادم رفته مقدار دادن آرایه دوبعدی رو. سرچم کردم ولی نتونستم پیاده سازی کنم

دوبعدی هم نشد تک بعدی هم مشکلی نداره.

poorman
یک شنبه 05 مرداد 1393, 21:46 عصر
سلام

برای اختصاص دادن فضا به آرایه تون اینطوری عمل کنید

String[][] result = new String[cursor.getCount()][2];

چون شما دو تا ستون دارید فقط

شما اول نیاز به یک ایندکس برای حرکت روی عناصر آرایه دارید مثلا int i = 0 که بیرون از حلقه تعریف میشه

توی حلقه شما برای مقدار دادن به هر خانه آرایه اینطوری عمل میکنید

result[i][0] = rowDate;
result[i][1] = rowFood;
i++;