ورود

View Full Version : آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper



صفحه : 1 [2]

poorman
سه شنبه 08 مهر 1393, 14:46 عصر
سلام

این اعمالی که میگید داخل کلاس آداپتر لیست ویو انجام میشه

برای اینکه به آیدی چیزی که کلیک شده دسترسی داشته باشید، شما باید علاوه بر سایر اطلاعاتی که به آداپتر میفرستید، یک لیست هم از آیدی شون بفرستید تا با پوزیشن دسترسی داشته باشید

zikimiki
سه شنبه 08 مهر 1393, 14:52 عصر
سلام

کدهای مربوط به قسمتی که برمیگردید رو بذارید تا ببینم دقیقا چه کاری انجام میشه، شاید بتونم راهنمایی تون کنم

سلام
من از دیروز کد ها رو فرستاندم.ولی در زمان ارسال اعلام کردند که پست باید به تایید مدیر سایت برسه.که با گذشت یک روز تایید نشده !
چطور کد رو بفرستم؟

saeed_g21
سه شنبه 08 مهر 1393, 17:02 عصر
سلام
من از دیروز کد ها رو فرستاندم.ولی در زمان ارسال اعلام کردند که پست باید به تایید مدیر سایت برسه.که با گذشت یک روز تایید نشده !
چطور کد رو بفرستم؟

مگه چطوری فرستادین ؟؟؟
همچین موردی نداریم

کدهای خود رو مثل پیام(همینجا) بفرست البته داخل تگ های مخصوص خود قرار دهید تا خوانا باشند

Amin-rz
سه شنبه 08 مهر 1393, 18:36 عصر
سلام.
مي خوام ديتابيس رو ياد بگيرم.
آموزش ها و روش ها زياد هست . تو اين تاپيك هم يكي دو تا هست.

بهترين روش كدوم هست؟

mojniknam
سه شنبه 08 مهر 1393, 20:51 عصر
سلام

این اعمالی که میگید داخل کلاس آداپتر لیست ویو انجام میشه

برای اینکه به آیدی چیزی که کلیک شده دسترسی داشته باشید، شما باید علاوه بر سایر اطلاعاتی که به آداپتر میفرستید، یک لیست هم از آیدی شون بفرستید تا با پوزیشن دسترسی داشته باشید

نحوه رفتن به یه اکتیویتی دیگه توی کلاس آداپتر چطوریه؟
کد من: (ارور میده)
Intent MyIntent;
MyIntent = new Intent(ActivityFehrest.this, ActivityDetail.class);
startActivity(MyIntent);
روی ActivityFehrest.this و startactivity ارور میگیره
ActivityFehrest همون اکتیویتی هست که کل لیست ویو رو نشون میده

zikimiki
سه شنبه 08 مهر 1393, 21:11 عصر
متاسفانه با نمیشه کد رو فرستاد این پیام رو میده:

Thank you for posting! Your post will not be visible until a moderator has approved it for posting.

zikimiki
سه شنبه 08 مهر 1393, 21:14 عصر
فایل رو پیوست کردم.

saeed_g21
سه شنبه 08 مهر 1393, 21:20 عصر
نحوه رفتن به یه اکتیویتی دیگه توی کلاس آداپتر چطوریه؟
کد من: (ارور میده)
Intent MyIntent;
MyIntent = new Intent(ActivityFehrest.this, ActivityDetail.class);
startActivity(MyIntent);
روی ActivityFehrest.this و startactivity ارور میگیره
ActivityFehrest همون اکتیویتی هست که کل لیست ویو رو نشون میده


Intent MyIntent;
MyIntent = new Intent(context, ActivityDetail.class);
startActivity(MyIntent);
اگه باز به StartActivity خطا گرفت بصورت زیر امتحان کن
context.startActivity(MyIntent);
این بحث چه ربطی به اینجا داره اخه دوست عزیزم
اگه به نتیجه نرسیدید اول جستجو کنید در انجمن اگه مطلب مناسبی پیدا نکردید تاپیک مجزا بزنید و از این تاپیک برای این سوال استفاده نفرمایید

باتشکر

mojniknam
سه شنبه 08 مهر 1393, 21:28 عصر
من توی اکتیویتی که لیست ویو رو نشون میده اول شماره ردیف لیست ویو رو بدست می آوردم و با دستوراتی که ذکر کردم، اکتیویتی دوم رو فراخوانی می کردم و با شماره ردیف لیست ویو، ردیف توی دیتابیس رو نشون میدادم. بعد متوجه شدم این شیوه کد نویسی صحیح نیست (لازم به ذکر دلایل نیست) و باید شماره ردیف دیتابیس رو پیدا کنم
اینجا بود که سوال پرسیدم و راهنمایی کردن از کلاس آداپتور
ولی با منتقل کردن کدهای کلیک به آداپتور ، ارورهای بالا رو میداد و نمیشد اکتیویتی رو فراخوانی کرد
ربطش اینجا بود جناب سعید! ممکنه برای دوستانی که مثل من برای کار کردن با این کتابخانه تازه کار هستن پیش بیاد
ولی باز هم ممنون

poorman
سه شنبه 08 مهر 1393, 23:39 عصر
فایل رو پیوست کردم.

این کدتون مال اکتیویتی خوندن داستان هست
کد اکتیویتی که لیست داستان ها هست رو هم بذارید، مهم اونجاست که چه تغییری انجام میشه

zikimiki
چهارشنبه 09 مهر 1393, 00:45 صبح
این کدتون مال اکتیویتی خوندن داستان هست
کد اکتیویتی که لیست داستان ها هست رو هم بذارید، مهم اونجاست که چه تغییری انجام میشه

خدمت شما.

فیلتر های من مواردی مثل : تغذیه تناسب اندام سلامت عموی و روان و... هستش که با کلیک بر روی دکمه ی خودشون نشون داده می شن.ولی وقتی که دکمه بک رو بزنم کلا بر می گرده و همه مطالب رو نشون میده.

poorman
چهارشنبه 09 مهر 1393, 22:29 عصر
خدمت شما.

فیلتر های من مواردی مثل : تغذیه تناسب اندام سلامت عموی و روان و... هستش که با کلیک بر روی دکمه ی خودشون نشون داده می شن.ولی وقتی که دکمه بک رو بزنم کلا بر می گرده و همه مطالب رو نشون میده.

دوست عزیز مشکل شما ارتباطی به دیتابیس نداره
مشکل شما فکر میکنم از داخل تابع onResume هست که دوباره اطلاعات رو ست میکنه

شما متغیر isAll رو تاجایی که دیدم بعد از اینکه توی onCreate مقدار true دادید، جایی false نکردید
در نتیجه این شرط همیشه اجرا میشه و تمام محتوای لیست رو نمایش میده

@Override
protected void onResume() {
super.onResume();
if (isAll) {
dastanha = db.getAllContacts();
}else {
dastanha=db.findFAVContacts();
}

refreshDisplay();

loadData();
if (lstState != null)
getListView().onRestoreInstanceState(lstState);
lstState = null;


}

خواهش میکنم توی این تاپیک تنها سوالات مربوط به دیتابیس رو مطرح کنید تا سایر عزیزان بتونن از مطالب و سوال و جواب ها، بهترین استفاده رو داشته باشند

Amin-rz
پنج شنبه 10 مهر 1393, 09:17 صبح
1.چطور می تونم علامت های " ' ( ) رو با این کد وارد دیتابیس کنم؟مثلا اسم یک دانش آموز ")(' هست.

mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('آدرس','اسم دانش آموز')");


2.سوال بعد اینکه چطور دو شرط ( where _id = 8 و where _NAME = "saeid" )یا بیشتر برای آپدیت بذارم؟

mydb.execSQL("update tableName set fieldName = 'امین' where _id = 8");


3.چطور موقع تعریف Cursor براش شرط بذارم که مثلا ردیف هایی که id>6 و name=="amin" هست رو شامل بشه؟
این همه ردیف ها رو شامل میشه:

Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE, null);

saeed_g21
پنج شنبه 10 مهر 1393, 14:05 عصر
1.چطور می تونم علامت های " ' ( ) رو با این کد وارد دیتابیس کنم؟مثلا اسم یک دانش آموز ")(' هست.

mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('آدرس','اسم دانش آموز')");


متوجه نشدم!



2.سوال بعد اینکه چطور دو شرط ( where _id = 8 و where _NAME = "saeid" )یا بیشتر برای آپدیت بذارم؟

mydb.execSQL("update tableName set fieldName = 'امین' where _id = 8");


در دادن شرط بین هر شرط همان طور که خودتان فرمودید از " و " استفاده میشه البته " و " انگلیسی یعنی " and " به مثال زیر توجه نمایید

mydb.execSQL("update tableName set fieldName = 'امین' where _id = 8 and tableName='امین'");






3.چطور موقع تعریف Cursor براش شرط بذارم که مثلا ردیف هایی که id>6 و name=="amin" هست رو شامل بشه؟
این همه ردیف ها رو شامل میشه:

Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE, null);

اینم مثل بگیه از شرط استفاده میشه به مثال زیر توجه نمایید :

Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE +" where name='amin' ", null);




توضیحات تکمیلی :

1) در استفاده از ' ' برای حروف الزامیست اما برای اعداد بشرطی که نوع جدول int یا integer تعریف شده باشه نیاز نمی باشد
2) برای برابر قراردادن فیلدی نیاز به 2تا مساوی نیست همین یکی کافیست
3) تعداد شرط دادن در Query محدود نمی باشد
4) از LIKE , NOT LIKE , OR هم میتوان در شرط ها استفاده کرد

LIKE )
1)
Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE +" where name LIKE 'amin' ", null);

2)
Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE +" where name LIKE '%amin' ", null);

3)
Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE +" where name LIKE 'amin%' ", null);

4)
Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE +" where name LIKE '%amin%' ", null);

به % در Query ها دقت نمایید
این % میگه مثلا کلمه ای که با amin شروع شده یا پایان یافته یا میان آن نوشته شده رو بیاب
قابل ذکر است که معنی آن با جابجای % در query تغییر می کند


NOT LIKE)
فکر کنم نیاز به توضیح نداره همینطور که مشخص هست NOT هست یعنی مخالف qury بالا

OR)
اینم مشخص هست " یا "


توجه مهم :
اگر در Query ای که از انواع شرط استفاده کرده باشید بهتر است داخل ( ) بندازید

Amin-rz
پنج شنبه 10 مهر 1393, 15:18 عصر
دستت درد نکنه سعید جان.:قلب:
در مورد سوال اول شما فرض کن آدرس یه نفر رو می خوای وارد کنی و آدرسش اینه : ایران"استان تهران
به این صورت وارد می کنم ارور میده:
mydb.execSQL("INSERT INTO " + TABLE + "(PLACE) VALUES('ایران"استان تهران')");
در واقع علامت " که داخل آدرس هست باعث میشه کد به هم بریزه.:متفکر:

saeed_g21
پنج شنبه 10 مهر 1393, 15:24 عصر
دستت درد نکنه سعید جان.:قلب:
خواهش می کنم دوست عزیز


در مورد سوال اول شما فرض کن آدرس یه نفر رو می خوای وارد کنی و آدرسش اینه : ایران"استان تهران
به این صورت وارد می کنم ارور میده:
mydb.execSQL("INSERT INTO " + TABLE + "(PLACE) VALUES('ایران"استان تهران')");
در واقع علامت " که داخل آدرس هست باعث میشه کد به هم بریزه.:متفکر:

بله دقیقا به " و ' خطا میگیره در Query
خوب چه اصراری داری از " استفاده کنی ؟
از - یا Space یا مثلا * یا _ استفاده کن خوب :لبخند:

Amin-rz
پنج شنبه 10 مهر 1393, 15:31 عصر
آخه قراره پیامک وارد دیتابیس کنم و خیلی از پیامک ها حتما " , ' توشونه.
بعد هم یه جایی می خوام از کاربر تکست بگیرم و تو دیتابیس بذارم شاید کاربر نیاز باشه " یا ' وارد کنه.
یه جایی خوندم یه علامتی قبل از" میذاشتن که اینطوری نشون میداد " بخشی از رشته هست و دیگه تو کد تاثیر نمیذاشت و کد رو به هم نمیریخت.

saeed_g21
پنج شنبه 10 مهر 1393, 15:39 عصر
فکر کنم \ رو میگین

تست نزدم چک کنید ببینید جواب میده "\
mydb.execSQL("INSERT INTO " + TABLE + "(PLACE) VALUES('ایران"\استان تهران')");

Amin-rz
پنج شنبه 10 مهر 1393, 15:42 عصر
نه اینا رو چک کردم نشد :(

alireza142
پنج شنبه 10 مهر 1393, 18:00 عصر
1.چطور می تونم علامت های " ' ( ) رو با این کد وارد دیتابیس کنم؟مثلا اسم یک دانش آموز ")(' هست.

mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('آدرس','اسم دانش آموز')");


2.سوال بعد اینکه چطور دو شرط ( where _id = 8 و where _NAME = "saeid" )یا بیشتر برای آپدیت بذارم؟

mydb.execSQL("update tableName set fieldName = 'امین' where _id = 8");


3.چطور موقع تعریف Cursor براش شرط بذارم که مثلا ردیف هایی که id>6 و name=="amin" هست رو شامل بشه؟
این همه ردیف ها رو شامل میشه:

Cursor cursor = mydb.rawQuery("SELECT * FROM "+ TABLE, null);


سلام

من هم دارم کار با دیتابیس رو یاد میگیرم.
از سایت زیر هم استفاده کنید که خیلی خوب انواع کوئری ها رو با مثال آموزش میده.

http://www.w3schools.com/sql/default.asp

Amin-rz
پنج شنبه 17 مهر 1393, 08:24 صبح
چرا من از متد :
mydb = MyDataBase.getReadableDatabase();
استفاده کردم ولی تونستم تو جدول اطلاعات وارد کنم؟
رفتم به مسیر : data/data/database و دیتابیسو باز کردم دیدم اطلاعات وارد شده.

Amin-rz
شنبه 19 مهر 1393, 16:17 عصر
چطور ميشه ديتابيس آماده رو با روشي كه در پست 9 هست كپي كنم تو data/data/database
بعد براي خوندن ، آپديت و ... از روش پست اول اضافه كنم؟
كه ديگه نياز به getReadaleDatabase() و getWritaleDatabase()
نباشه.

saeed_g21
شنبه 19 مهر 1393, 16:29 عصر
واسه کپی کردن فکر کنم بتونی از کدی که در " این هم کد " با موضوع پشتیبانگیری و بازیابی قرار دادم و شما از قسمت بازیابیش با کمی تغییرات استفاده کنی

poorman
شنبه 19 مهر 1393, 22:12 عصر
چطور ميشه ديتابيس آماده رو با روشي كه در پست 9 هست كپي كنم تو data/data/database
بعد براي خوندن ، آپديت و ... از روش پست اول اضافه كنم؟
كه ديگه نياز به getReadaleDatabase() و getWritaleDatabase()
نباشه.

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

شما همیشه از getWritable استفاده کنید، کاری نداشته باشید که میخواین بخونین یا بنویسین

جواد ملاولی
سه شنبه 29 مهر 1393, 22:12 عصر
سلام به دوستان.
در سورت بر اساس یک فیلد، حروف پ ژ گ چ در آخر قرار میگیرن، راهی برای درست کردنش هست؟

جواد ملاولی
چهارشنبه 30 مهر 1393, 22:06 عصر
سلام به دوستان.
در سورت بر اساس یک فیلد، حروف پ ژ گ چ در آخر قرار میگیرن، راهی برای درست کردنش هست؟

کسی قبلا با این مساله مواجه نشده؟

saeed_g21
پنج شنبه 01 آبان 1393, 11:20 صبح
سلام به دوستان.
در سورت بر اساس یک فیلد، حروف پ ژ گ چ در آخر قرار میگیرن، راهی برای درست کردنش هست؟

میتونی مثل Query زیر استفاده کنی
select * from username order by name like '%ژ' desc

جواد ملاولی
پنج شنبه 01 آبان 1393, 14:53 عصر
میتونی مثل Query زیر استفاده کنی
select * from username order by name like '%ژ' desc
ممنون، تست کردم درست شد.
این چند ساله که با انواع دیتابیس سر و کار داشتم با حرف ک و ی به مشکل خورده بودم ولی با پژگچ نه.
ولی نفهمیدم اون like که بعد از order by گذاشتی چکار می کنه؟

meysam jahedi
پنج شنبه 01 آبان 1393, 20:54 عصر
سلام
در دستور insert مگه لازمه ستونی رو که در sqlite (جدول اماده) AUTOINCREMENT تعریف کردیم ، قید کنیم ؟ ID رو اتونامبر گرفتم اما نمیدونم چرا وقتی نام ، فامیل رو میزنم و insert میکنم ، فیل ID در هر ردیف خالی میمونه و اوتوماتیک شماره نمیزنه ، آیا در دستور insert باید id هم ذکر بشه ؟ چجوری؟

meysam jahedi
جمعه 02 آبان 1393, 10:29 صبح
با این خط دوتا ستون رو میفرسته امام ستون id رو که autonumber ، خالی میزاره ، نمیدونم چرا id اتوماتیک پر نمیشه

mydb.execSQL("INSERT INTO tdb (NAME, FAMILY) VALUES ('" + name + "', '" + family + "')");

saeed_g21
جمعه 02 آبان 1393, 19:42 عصر
ممنون، تست کردم درست شد.
این چند ساله که با انواع دیتابیس سر و کار داشتم با حرف ک و ی به مشکل خورده بودم ولی با پژگچ نه.
ولی نفهمیدم اون like که بعد از order by گذاشتی چکار می کنه؟

ببین اون ک و ی که میگی ک و ی عربی هستند کافیه در اونارو با ک و ی فارسی Replace کنی مشکل حل میشه

شما گفته بودید " حروف پ ژ گ چ در آخر قرار میگیرن " برای همین از Like استفاده کردم که ژ هایی که در اخر داره رو سورت کنه یک نمونه بود که الهام بگیری که مثل اینکه مشکل تان حل شده

saeed_g21
جمعه 02 آبان 1393, 19:44 عصر
با این خط دوتا ستون رو میفرسته امام ستون id رو که autonumber ، خالی میزاره ، نمیدونم چرا id اتوماتیک پر نمیشه

mydb.execSQL("INSERT INTO tdb (NAME, FAMILY) VALUES ('" + name + "', '" + family + "')");

اگه مشخصات id رو همانند زیر ایجاد کردید نباید مشکلی داشته باشید
id integer primary key autoincrement

ولی اگه باز مشکل رفع نشده باشه میتوانید مثل مثال زیر استفاده نمایید

mydb.execSQL("INSERT INTO tdb (ID,NAME, FAMILY) VALUES (id+1,'" + name + "', '" + family + "')");

meysam jahedi
جمعه 02 آبان 1393, 20:50 عصر
ا دستورات مقابل دوتا ستون name و family رو میخوام از دیتا بیس بخونم ، اگه بخوام به طریق لیست ویو سفارشی نشون بدم به چه صورت ؟
یه فرم به نام row دارم که دوتا textview برای name و family گذاشتم ، میخوام این دو ستون رو از طریق سفارشی اونجا تو لیست ویو نشون بدم ، میشه دستوراتش رو بنویسید؟http://barnamenevis.org/images/smilies/yahoo/116.gifhttp://barnamenevis.org/images/smilies/yahoo/115.gifhttp://barnamenevis.org/images/smilies/yahoo/114.gifhttp://barnamenevis.org/images/smilies/yahoo/116.gif یعنی توی یک آداپتر میشه همزمان چند ستون رو داد؟
public void refresh(){
mydb=mydata.getReadableDatabase();
Cursor recdaryafti = mydb.rawQuery("select* from tdb", null);
NAME = new String[recdaryafti.getCount()];
String[] FAMILY = new String[recdaryafti.getCount()];
int i = 0;
if(recdaryafti.moveToFirst()){
do{

NAME[i] = recdaryafti.getString(1);
FAMILY[i] = recdaryafti.getString(2);
i++;
}
while(recdaryafti.moveToNext());
}

recdaryafti.close();
mydb.close();


list.setAdapter(new ArrayAdapter <String>(this,R.layout.row,R.id.row_txtname,NAME)) ;

}

o0o0okay
سه شنبه 06 آبان 1393, 23:37 عصر
سلام دوستان گل
اقا من توی دیتابیس به یه مشکلی خوردم که خیلی پیچیده نیست. فقط چون من تجربه م کمه به مشکل خوردم.
من یه دیتابیس ساختم ولی فکر میکنم درست اتصال پیدا نکرده.

تمام اطلاعات درمورد کلاس و دیتابیس رو توی این تاپیک قرار دادم ولی کسی جوابی نداده.
http://barnamenevis.org/showthread.php?472767-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D9%88%D8%AF%DB%8C%D9%88&highlight=%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8% B3+%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF

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

2010mjm
چهارشنبه 14 آبان 1393, 02:49 صبح
تشکر فراوان از آقا poorman (http://barnamenevis.org/member.php?295320-poorman) و آقا hamedjj (http://barnamenevis.org/member.php?290105-hamedjj)
آقا من دو روز میشه دارم با برنامم ور میرم واسه اجرای اون روی اندروید 2.2 که همش موقع کار با دیتابیس دچار مشکلاتی می شد،
راه حل های زیادی رفتم، تا بالاخره به پروژه android-sqlite-asset-helper در گیت بر خوردم، دوستم بهم گفت که توی barnamenevis.org آموزش فارسیش هست، سری سرچ کردم توی گوگل و این تاپیک رو پیدا کردم، و خیلی عالی و کامل آقا poorman زحمتش رو کشیدن ;)
به بقیه دوستان هم پیشنهاد میکنم از این کتابخونه استفاده کنن.
بازم ممنون
یا علی

tux-world
چهارشنبه 14 آبان 1393, 09:36 صبح
پروژه ORM ای که با اسم GreenDao توسعه داده شده هم بسیار عالیست

msi.kak
شنبه 24 آبان 1393, 14:51 عصر
سلام ممنون از زحماتتون.دوتا سوال داشتم.
1.من دیتابیسمو با sqlite managerساختم.پسوندی که ایجاد میکنه در پایان .sqlite ولی شما گفتین باید .db باشه!ایا باید من خودم پسوندشو عوض کنم؟
2.داخل کلاس mydatabase نباید ستون های جدولمو تعریف کنم؟

poorman
شنبه 24 آبان 1393, 20:38 عصر
سلام

اشکالی نداره دستی تغییر بدید به .db

نیازی به تعریف ستون ها در کلاس MyDatabase نیست، فقط کافیست طبق مراحل عمل کنید

msi.kak
سه شنبه 27 آبان 1393, 11:59 صبح
سلام ببخشید من طبق مراحل پیش رفتم ولی بازم برنامم اجرانمیشه.پیغام های log cat رو براتون میذارم اگه لطف کنید راهنماییم کنید ممنون میشم125825

poorman
سه شنبه 27 آبان 1393, 21:16 عصر
دوست عزیز عکسی که گذاشتید خیلی کوچیکه، من نتونستم متن خطا رو بخونم

مطمئن بشید که دیتابیس به درستی داخل پوشه assets/databases قرار گرفته با شکل نامگذاری data.db.zip ( حتما زیپ شده باشه )

توی کلاس MyDatabase اسم دیتابیس رو بدون پسوند zip بنویسید

meysam jahedi
چهارشنبه 28 آبان 1393, 10:02 صبح
سلام
میخوام یه سرچ آنلاین یعنی سرچی تو textChenged یه edittext قرار بدم اما دستور sql که مینویسم براش خوب کار نمیکنه


select * from tbl where name like '%"+TXT+"%' group by name

نمیدونم چرا بخش group by name خوب جواب نمیده و name های تکراری رو میاره (تو tbl سطر های تکراری از name دارم برا همین از group استفاده میکنم)
مثلا اگه تو فیلد name داشته باشیم (پریا و محمد و...)
نمیدونم چرا وقتی پ رو مینویسم جای اینکه فقط یکبار تو لیست ویو پریا بیاد ٰ چندین بار نشون داده میشه و باید حرف دوم رو هم بزنم (یعنی پر) تا یک بار نشون بده تو لیست ویو
اما برا بعضی از name ها جواب میده و فقط یکبار تو لیست ویو با تایپ اولین حرف نشون داده میشه

نمیدونم قضیش چیه

poorman
چهارشنبه 28 آبان 1393, 10:45 صبح
سلام
مشکلی که میگید فکر میکنم بیشتر در رابطه با کاراکترهای عربی باشه ( ک ، ی )
احتمالا توی دیتابیس با کاراکترهای عربی ذخیره کردید و وقتی دارید جستجو انجام میدید با کاراکترهای فارسی جستجو میکنید

برای اینکه دقیقا از عملکرد کوئری تون مطمئن بشید با کاراکترهای انگلیسی امتحان کنید

msi.kak
چهارشنبه 28 آبان 1393, 15:41 عصر
سلام خیلی ببخشید که عکسم کوچیک بود.من طبق مراحلی که فرموده بودین دیتابیسم رو کپی کردم ولی نمیفهمم مشکلش از کجاست.سک عکس بزرگتر براتون میذارم125869

poorman
چهارشنبه 28 آبان 1393, 18:00 عصر
خطاتون داره میگه فایل دیتابیس MyDB.db رو نمیتونه توی assets پیدا کنه

به کوچیکی و بزرگی نام گذاری فایل ها و پوشه هاتون دقت داشته باشید حتما

احتمال داره اسم فایل دیتابیس داخل zip تفاوت داشته باشه با اسم فایل زیپ یا هر چیز دیگه ای، متن خطا جزئیات رو ننوشته دیگه

meysam jahedi
پنج شنبه 29 آبان 1393, 09:46 صبح
سلام
مشکلی که میگید فکر میکنم بیشتر در رابطه با کاراکترهای عربی باشه ( ک ، ی )
احتمالا توی دیتابیس با کاراکترهای عربی ذخیره کردید و وقتی دارید جستجو انجام میدید با کاراکترهای فارسی جستجو میکنید

برای اینکه دقیقا از عملکرد کوئری تون مطمئن بشید با کاراکترهای انگلیسی امتحان کنید

متوجه نمیشم ، یعنی چی با کاراکتر عربی ذخیره کردم و فارسی جستجو میکنم؟
خب پس باید چکار کنم؟

poorman
پنج شنبه 29 آبان 1393, 10:05 صبح
ببینید حروف "ک" و "ی" توی کیبورد عربی و فارسی دارای کدهای متفاوتی هستند

احتمال داره متن داخل دیتابیس شما کپی شده باشه و شامل کاراکترهای "ک" و "ی" عربی باشه
و شما وقتی دارید جستجو میکنید با کیبورد فارسی جستجو میکنید که نتیجه درستی نمیگیرید

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

meysam jahedi
پنج شنبه 29 آبان 1393, 18:32 عصر
ببینید حروف "ک" و "ی" توی کیبورد عربی و فارسی دارای کدهای متفاوتی هستند

احتمال داره متن داخل دیتابیس شما کپی شده باشه و شامل کاراکترهای "ک" و "ی" عربی باشه
و شما وقتی دارید جستجو میکنید با کیبورد فارسی جستجو میکنید که نتیجه درستی نمیگیرید

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

متن داخل دیتابیس رو انگلیسی گذاشتم درست سرچ نکرد ، یعنی 3 تا سطر name رو مثلا meysam گذاشتم و یک سطر رو mohamad

اما وقتی تو ادیت تکست مینویسم m فقط meysam رو دو بار نشون میده (که باید یک بار بخاطر group by نشون بده) و mohamad رو هم نمیاره تا حرف دوم بزنم یعنی mo

یک هفته درگیرشم ! نمیدونم چرا انجام نمیشه این یه خط sql .

کل دستوراتی که براش نوشتم میزارم :(دو ستون مورد نظرم در دیتابیس name و matn هستش)


public String jostojoo(int row,int col,String word,String feild){
mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}
cu.moveToPosition(row);
String save=cu.getString(col);
return save;
}

public Integer shomaresh_jostojoo(String word,String feild){

mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}

int save=cu.getCount();
mydb.close();
return save;
}

private void refresher(String text1,String feild){

mydata=mydb.getReadableDatabase();

int save=shomaresh_jostojoo(text1, feild);
if(txt.getText().toString().equals("")){
save=0;
status.setText("لطفا متن مورد نظر خود را وارد نمایید");
}else{
status.setText("تعداد "+save+" مورد یافت شد");
}
NAME=new String[save];
FASL=new String[save];
page=new String[save];

cpage=new String[save];
for(int i=0;i<save;i++){

NAME[i]=jostojoo(i, 1, text1, feild);
FASL[i]=jostojoo(i, 5, text1, feild);
Cursor tedad=mydata.rawQuery("select * from tbl where name='"+NAME[i]+"'order by id", null);
cpage[i]=tedad.getCount()+"";
if (feild.equals("name")) {
page[i]="";
}else{
page[i]="-->"+jostojoo(i,3,text1, feild);


}
}

setListAdapter(new MyAdapterSearch(this, NAME, FASL,page));
mydb.close();

}


txt.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

if(rb_story_name.isChecked()){
refresher(txt.getText().toString(), "name");
}
else if(rb_matn.isChecked())
{
refresher(txt.getText().toString(), "matn");
}

}

poorman
پنج شنبه 29 آبان 1393, 20:32 عصر
عجیبه من خطایی توی کوئری هاتون نمیبینم

برای اینکه مطمئن بشید خطا از کوئری ها یا ساختار دیتابیس نیست، با نرم افزار SQLite Database Browser کوئری هاتون رو روی دیتابیس امتحان کنید
اگر درست جواب بگیرید معلوم میشه مشکلتون جای دیگه ست

راه دیگه ای به نظرم نرسید

meysam jahedi
جمعه 30 آبان 1393, 10:09 صبح
عجیبه من خطایی توی کوئری هاتون نمیبینم
منم از همینش در عجبم:گیج:

آداپتری رو که ازش استفاده میکنم به این صورت (ببینید ، به این که ربط نداره ؟ درسته؟)


package com.story.dastan;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapterSearch extends BaseAdapter {
Activity a;

String[] N;
String[] F;
String[]p;

private mydatabase mydata;
private SQLiteDatabase mydb;
public MyAdapterSearch (Activity act,String[] name,String[]fasl,String[]page){
a=act;
this.N=name;
this.F=fasl;
this.p=page;
this.mydata = new mydatabase(act.getApplicationContext());
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return N.length;
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}


@Override
public View getView(final int pos, View convertView, ViewGroup arg2) {

View mylist;
LayoutInflater inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
if (convertView == null) {
mylist = new View(a);

mylist = inflater.inflate(R.layout.row_listdastan, null);

TextView textView1 = (TextView) mylist.findViewById(R.id.row_listdastan_name);
TextView textView2 = (TextView) mylist.findViewById(R.id.row_listdastan_tedad);

textView1.setText("فصل :"+ F[pos]+": "+N[pos]+p[pos]);
textView2.setText("");
textView1.setTypeface(Main.font);
textView2.setTypeface(Main.font);
} else {
mylist = convertView;
}
return mylist;
}


}

poorman
جمعه 30 آبان 1393, 14:03 عصر
نه به آداپترتون ربطی نداره باید ببینید توابع خواندن از دیتابیس دقیقا چی برمیگردونه و چرا داره این اتفاق میفته

meysam jahedi
جمعه 30 آبان 1393, 16:06 عصر
من که دیگه موندم والا !!
دیتابیسش سادست و چیزی نداره ، اگه لطف کنید یه نگاهی بهش بندازید ممنون میشم

http://s5.picofile.com/file/8152846568/story_db.zip.html

poorman
جمعه 30 آبان 1393, 16:55 عصر
من دیتابیستون رو دیدم، کوئری ها داره درست عمل میکنه

چیزی که الان به ذهنم رسید اینه که شرط هاتون توی توابع درست عمل نمیکنه و همیشه شرط else داره اجرا میشه

کلا نمیدونم چرا توی مقایسه دو رشته توی اندروید این مشکل پیش میاد، شرط field.equals("name") به احتمال زیاد اجرا نمیشه

meysam jahedi
جمعه 30 آبان 1393, 17:22 عصر
من دیتابیستون رو دیدم، کوئری ها داره درست عمل میکنه

چیزی که الان به ذهنم رسید اینه که شرط هاتون توی توابع درست عمل نمیکنه و همیشه شرط else داره اجرا میشه

کلا نمیدونم چرا توی مقایسه دو رشته توی اندروید این مشکل پیش میاد، شرط field.equals("name") به احتمال زیاد اجرا نمیشه
نه ، اگه field.equals("name") اجرا نمیشد که چیزی نشون نمیداد اصلا ، چون دوتا RadioButton دارم که یکی جستجو بر اساس name یکی جستجو بر اساس matn ، در field.equals("name") هنگامی رخ میده که ستون name باشه ، چون اجرا میشه یه چیزایی تو لیست ویو میاد ولی group by هستش که فیلتر بر اساس name رو انجام نمیده و همه رو میاره !!

poorman
شنبه 01 آذر 1393, 01:23 صبح
public String jostojoo(int row,int col,String word,String feild){
mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}
cu.moveToPosition(row);
String save=cu.getString(col);
return save;
}

public Integer shomaresh_jostojoo(String word,String feild){

mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}

int save=cu.getCount();
mydb.close();
return save;
}[/QUOTE]



ببینید شما وقتی میخواین جستجو کنین این توابع رو فراخوانی میکنید دیگه درسته؟

حالا توی این توابع یک شرط دارید، اگر برقرار باشه group by میشه، اگر برقرار نباشه group by نمیشه
من میگم شرط شما برقرار نیست که این اتفاق میفته

به نظرم همیشه شرط else اتفاق میفته
میتونید با یک log کردن ساده بفهمید که تابع داره وارد کدوم شرط میشه

meysam jahedi
شنبه 01 آذر 1393, 09:42 صبح
public String jostojoo(int row,int col,String word,String feild){
mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}
cu.moveToPosition(row);
String save=cu.getString(col);
return save;
}

public Integer shomaresh_jostojoo(String word,String feild){

mydata=mydb.getReadableDatabase();
Cursor cu;
if(feild.equals("name")){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);
}else{
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);
}

int save=cu.getCount();
mydb.close();
return save;
}





ببینید شما وقتی میخواین جستجو کنین این توابع رو فراخوانی میکنید دیگه درسته؟

حالا توی این توابع یک شرط دارید، اگر برقرار باشه group by میشه، اگر برقرار نباشه group by نمیشه
من میگم شرط شما برقرار نیست که این اتفاق میفته

به نظرم همیشه شرط else اتفاق میفته
میتونید با یک log کردن ساده بفهمید که تابع داره وارد کدوم شرط میشه[/QUOTE]

دو تا RadioButton دارم که نوع جستجو رو انتخاب میکنم
دستور جستجو رو شرطش رو اینجوری هم مینویسم بازم تغییری نمیکنه و همونجوری میشه

public String jostojoo(int row,int col,String word,String feild){
mydata=mydb.getReadableDatabase();
Cursor cu;
String save;
//if(feild.equals("name")){
if( rb_story_name.isChecked()){
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'group by name", null);

}else {
cu=mydata.rawQuery("select * from tbl where "+feild+" Like '%"+word+"%'", null);

}
cu.moveToPosition(row);
save=cu.getString(col);
return save;
}


حالا توی این توابع یک شرط دارید، اگر برقرار باشه group by میشه، اگر برقرار نباشه group by نمیشه
من میگم شرط شما برقرار نیست که این اتفاق میفته

یعنی if(feild.equals("name")) انجام نمیشه ؟؟؟
خب تو دستورات زیر که تو پست های قبل هم نوشته بودم :


private void refresher(String text1,String feild){

mydata=mydb.getReadableDatabase();

int save=shomaresh_jostojoo(text1, feild);
if(txt.getText().toString().equals("")){
save=0;
status.setText("لطفا متن مورد نظر خود را وارد نمایید");
}else{
status.setText("تعداد "+save+" مورد یافت شد");
}
NAME=new String[save];
FASL=new String[save];
page=new String[save];

cpage=new String[save];
for(int i=0;i<save;i++){

NAME[i]=jostojoo(i, 1, text1, feild);
FASL[i]=jostojoo(i, 5, text1, feild);
Cursor tedad=mydata.rawQuery("select * from tbl where name='"+NAME[i]+"'order by id", null);
cpage[i]=tedad.getCount()+"";
if (feild.equals("name")) {
page[i]="";
}else{
page[i]="-->"+jostojoo(i,3,text1, feild);


}
}

setListAdapter(new MyAdapterSearch(this, NAME, FASL,page));
mydb.close();

}



شرط
if (feild.equals("name")) {
page[i]="";
}else{
page[i]="-->"+jostojoo(i,3,text1, feild);


}


اجرا میشه که تو لیست ویوم وقتی بر اساس name هستش شماره صفحه خالی میزاره
:عصبانی++::عصبانی++::عصبانی++:: صبانی++::عصبانی++::عصبانی++:

meysam jahedi
شنبه 01 آذر 1393, 19:25 عصر
همچنان مشکلم پابرجاست

weblox
دوشنبه 17 آذر 1393, 23:58 عصر
سلام



فایل Jar را متاسفانه نتوانست دانلود کنم اگر امکانش هست بصورت فشرده در جایی دیگر قرار دهید.
کلاس Mydatabase در کجا باید ایجاد شود؟

hamedjj
چهارشنبه 19 آذر 1393, 01:39 صبح
سلام
10 تا record در دیتابیس دارم.
در برنامه یه دکمه قرار دادم که هر بار با زدن دکمه record بعدی نمایش داده میشه
وقتی به record دهم میرسه با زدن دکمه برنامه کرش میشه چون record ها به پایان رسیده است
Index 10 requested, with a size of 10

سوال اینه که چطور مینم از این کرش شدن برنامه جلوگیری کنم ؟ (مثلا یه پیام نشون بدم که دیتابیس تمام شده)

با تشکر و احترام

c0mmander
چهارشنبه 19 آذر 1393, 15:57 عصر
سلام
10 تا record در دیتابیس دارم.
در برنامه یه دکمه قرار دادم که هر بار با زدن دکمه record بعدی نمایش داده میشه
وقتی به record دهم میرسه با زدن دکمه برنامه کرش میشه چون record ها به پایان رسیده است
Index 10 requested, with a size of 10

سوال اینه که چطور مینم از این کرش شدن برنامه جلوگیری کنم ؟ (مثلا یه پیام نشون بدم که دیتابیس تمام شده)

با تشکر و احترام

سلام
اول از همه با اجازه از اساتید و دوستان

ساده ترین راه ممکن به نظر من این که با استفاده از try ...catch ارور به به دام بندازید و با در قسمت Catch از کویری


SELECT * FROM TableName order by column DESC LIMIT 1

برای رفتن به اخرین رکودر ذخیره شده استفاده کن.

poorman
چهارشنبه 19 آذر 1393, 16:54 عصر
سلام
10 تا record در دیتابیس دارم.
در برنامه یه دکمه قرار دادم که هر بار با زدن دکمه record بعدی نمایش داده میشه
وقتی به record دهم میرسه با زدن دکمه برنامه کرش میشه چون record ها به پایان رسیده است
Index 10 requested, with a size of 10

سوال اینه که چطور مینم از این کرش شدن برنامه جلوگیری کنم ؟ (مثلا یه پیام نشون بدم که دیتابیس تمام شده)

با تشکر و احترام

سلام حامد جان

اگر فقط بخوای خطا نگیری کاری که دوست عزیزمون commander گفت مناسب هست
اما اگر بخوای شرایط رو کنترل کنی
به نظر من بهتره اول تعداد سطرهای داخل دیتابیس رو بگیری و یه جا ذخیره کنی
با کوئری زیر میشه تعداد رو گرفت

Cursor c = mydb.rawQuery("select count(*) from table", null);

مهم همون count(*) هست که تعداد رو برمیگردونه

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

poorman
شنبه 22 آذر 1393, 00:21 صبح
سلام



فایل Jar را متاسفانه نتوانست دانلود کنم اگر امکانش هست بصورت فشرده در جایی دیگر قرار دهید.
کلاس Mydatabase در کجا باید ایجاد شود؟



سلام

فایل دوباره آپلود شد

کلاس MyDatabase رو همونجایی که بقیه اکتیویتی هاتون هستن بسازید به عنوان یک کلاس جدا

ehsanh22
شنبه 22 آذر 1393, 19:07 عصر
سلام من یه دیتابیس دارم برای پروژه کتاب هست . پروژه رو از اینترنت دانلود کردم . حالا میخوام این دیتابیس کلا چه بخش جستجو و علاقه مندی و نمایش رکورد ها محدود به 10 عدد بشه . میشه برام تغییرش بدید بلد نیستم:ناراحت:


package com.example.book;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;






public class database extends SQLiteOpenHelper {



public final String path="data/data/com.example.book/databases/";
public final String Name="database";
public SQLiteDatabase mydb;

private final Context mycontext;


public database(Context context) {
super(context, "database", null, 1);
mycontext=context;

}



@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub

}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub

}


public void useable(){

boolean checkdb=checkdb();

if(checkdb){


}else{

this.getReadableDatabase();

try{
copydatabase();
}catch(IOException e){
}

}



}

public void open(){

mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);

}

public void close(){
mydb.close();
}

public boolean checkdb(){

SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{


}
//mydb.close();
return db !=null ? true:false ;

}

public void copydatabase() throws IOException{
OutputStream myOutput = new FileOutputStream(path+Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open(Name);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}

public String Display(int row,int field,String table){
int limit = 10;
Cursor cu=mydb.rawQuery("select * from "+table, null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}



public Integer count(String table,String field){

Cursor cu=mydb.rawQuery("select * from "+table+" group by "+field, null);
int s=cu.getCount();
return s;
}

public String Season_display(String table,int row){

Cursor cu=mydb.rawQuery("select * from "+table+" group by Seasone", null);
cu.moveToPosition(row);
String s=cu.getString(4);
return s;
}

public Integer Story_count(String table,String sea){

Cursor cu=mydb.rawQuery("select * from "+table+" where Seasone='"+sea+"' group by Name", null);
int s=cu.getCount();
return s;
}

public String Story_display(String table,int row,String sea, int field){

Cursor cu=mydb.rawQuery("select * from "+table+" where Seasone='"+sea+"' group by Name", null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}


public Integer Story_page_count(String table,String sea,String story){

Cursor cu=mydb.rawQuery("select * from "+table+" where Seasone='"+sea+"' and Name='"+story+"'", null);
int s=cu.getCount();
return s;
}

public String main_display(String table,String sea,String name,String page){

Cursor cu=mydb.rawQuery("select * from "+table+" where Seasone='"+sea+"' and Name='"+name+"' and Page="+page, null);
cu.moveToFirst();
String s=cu.getString(2);
return s;
}




public void fav_update(String table,String sea, String name,String v){
ContentValues cv=new ContentValues();
cv.put("Fav", v);
mydb.update(table, cv, "Seasone='"+sea+"' and Name='"+name+"'", null);



}

public Integer fav_count(String table){

Cursor cu=mydb.rawQuery("select * from "+table+" where Fav=1 group by Name", null);
int s=cu.getCount();
return s;
}


public String fav_display(String table,int row,int field){

Cursor cu=mydb.rawQuery("select * from "+table+" where Fav=1 group by Name", null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}


public Integer count_serach(String word,String field){

Cursor cu;
if(field.equals("Name")){
cu=mydb.rawQuery("select * from content where "+field+" Like '%"+word+"%' group by Name", null);
}else{
cu=mydb.rawQuery("select * from content where "+field+" Like '%"+word+"%'", null);
}

int s=cu.getCount();
return s;
}


public String serach(int row,int col,String word,String field){

Cursor cu;
if(field.equals("Name")){
cu=mydb.rawQuery("select * from content where "+field+" Like '%"+word+"%' group by Name", null);
}else{
cu=mydb.rawQuery("select * from content where "+field+" Like '%"+word+"%'", null);
}


cu.moveToPosition(row);
String s=cu.getString(col);
return s;
}




public Integer all_story_count(String table){

Cursor cu=mydb.rawQuery("select * from "+table+" group by Name", null);
int s=cu.getCount();
return s;
}

public String all_story_display(String table,int row,int field){

Cursor cu=mydb.rawQuery("select * from "+table+" group by Name order by ID", null);
cu.moveToPosition(row);
String s=cu.getString(field);
return s;
}



}

poorman
شنبه 22 آذر 1393, 21:28 عصر
سلام من یه دیتابیس دارم برای پروژه کتاب هست . پروژه رو از اینترنت دانلود کردم . حالا میخوام این دیتابیس کلا چه بخش جستجو و علاقه مندی و نمایش رکورد ها محدود به 10 عدد بشه . میشه برام تغییرش بدید بلد نیستم:ناراحت:

سلام

کدهایی که گذاشتید مال کل کلاس دیتابیس هست، برای کاری که میخواید بکنید باید ساختار پروژه کامل مشخص بشه

ehsanh22
شنبه 22 آذر 1393, 21:50 عصر
سلام

کدهایی که گذاشتید مال کل کلاس دیتابیس هست، برای کاری که میخواید بکنید باید ساختار پروژه کامل مشخص بشه

سلام لینک پروژه رو براتون فرستادم ممنون

weblox
سه شنبه 25 آذر 1393, 23:39 عصر
می بخشید یه سوال خیلی آماتوری :
مشکل چی هست در این کد؟

http://upload7.ir/imgs/2014-12/90349923479741471659.gif

poorman
سه شنبه 25 آذر 1393, 23:55 عصر
سلام

شما متغیر mydb رو قبلش تعریف نکردید دوست عزیز

SQLiteDatabase mydb;

weblox
چهارشنبه 26 آذر 1393, 13:05 عصر
چرا نرم افزار DB Browser for SQLite خروجی دیتابیس را .sql میده نه .db ؟

saeed_g21
چهارشنبه 26 آذر 1393, 14:12 عصر
چرا نرم افزار DB Browser for SQLite خروجی دیتابیس را .sql میده نه .db ؟

فرمت فایل مهم نیست میتوانید بصورت دستی به .db یا .mp3 و ... تغییر دهید

weblox
چهارشنبه 26 آذر 1393, 20:21 عصر
مشکل این کد چی هست که برنامه با ارور اجرا میشه؟
یک مقدار را می خوام از یک فیلد جدول بگیرم و در textview بریزم.

http://upload7.ir/imgs/2014-12/83409522783585105688.gif

saeed_g21
چهارشنبه 26 آذر 1393, 20:33 عصر
'(' رو از انتهای Query بردار حل میشه
اشتباه درج شده خطامیده

weblox
چهارشنبه 26 آذر 1393, 20:47 عصر
'(' رو از انتهای Query بردار حل میشه
اشتباه درج شده خطامیده

متاسفانه باز هم ارور های زیر را در یافت کردم و برنامه بسته شد.
http://upload7.ir/imgs/2014-12/36885649611009248748.gif

saeed_g21
چهارشنبه 26 آذر 1393, 20:56 عصر
قبلی هم یک خطا بود چون لاگ رو نداده بودین این خطا مشخص نبود برا همین

ببین دیتابیست رو نمیتونه باز کنه برا همین
کدهای MyDatabase.java ت رو بده

weblox
چهارشنبه 26 آذر 1393, 21:20 عصر
قبلی هم یک خطا بود چون لاگ رو نداده بودین این خطا مشخص نبود برا همین

ببین دیتابیست رو نمیتونه باز کنه برا همین
کدهای MyDatabase.java ت رو بده

اینم از کد های کلاس دیتابیس:

http://upload7.ir/imgs/2014-12/15552619168251745903.gif

poorman
پنج شنبه 27 آذر 1393, 00:19 صبح
دوست عزیز فایل دیتابیس باید توی پوشه assets و توی پوشه databases باشه
به کوچکی و بزرگی حروف اسم پوشه ها هم توجه کنید

roboman78
پنج شنبه 27 آذر 1393, 19:19 عصر
سلام
از این دیتابیس چه طوری میشه مثلا واسه یه بانک مطلبی استفاده کرد؟

poorman
جمعه 28 آذر 1393, 01:22 صبح
سلام
از این دیتابیس چه طوری میشه مثلا واسه یه بانک مطلبی استفاده کرد؟

سلام
سوالتون رو دقیق متوجه نشدم
بانک اطلاعات متلب منظورتون هست؟

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

roboman78
جمعه 28 آذر 1393, 12:06 عصر
سلام
سوالتون رو دقیق متوجه نشدم
بانک اطلاعات متلب منظورتون هست؟

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

نه منظورم از مطلب یعنی جک داستان و اینا
حالا اینارو چه طوری میشه توی این دیتابیس قرار داد
:لبخندساده:

poorman
جمعه 28 آذر 1393, 16:57 عصر
نه منظورم از مطلب یعنی جک داستان و اینا
حالا اینارو چه طوری میشه توی این دیتابیس قرار داد
:لبخندساده:

برای درست کردن دیتابیس جوک یا داستان هیچ تفاوتی وجود نداره

مثلا برای دیتابیس پیامک شما به چند ستون توی جدول نیاز دارید
ستون آیدی، ستون دسته بندی و ستون متن پیامک

یا برای ذخیره داستان
ستون آیدی، ستون فصل، ستون قسمت و ستون داستان

محدودیتی برای ذخیره متن ندارید، میتونید متن های بلند رو هم ذخیره کنید اما برای داستان بهتره متن ها رو تکه تکه کنید تا نمایشتون صفحه ای باشه

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

roboman78
جمعه 28 آذر 1393, 18:37 عصر
پس یعنی باید دیتابیسو از یه برنامه مثل sql expert بسازم؟ یا همین تو هم میشه متون رو کپی کرد؟

Apriliyaa
جمعه 28 آذر 1393, 20:41 عصر
آقا ما یه دیتابیس sqlite داریم
چه جوری به لیست ویو خودمون حالی کنیم که مثلا آقا شما فقط بیا ردیف های مثلا ۱ و ۳و ۷ و ۸ جدول رو بگیرو و نشون بده و و با باقی ردیف ها کار نداشته باش؟

poorman
جمعه 28 آذر 1393, 23:49 عصر
پس یعنی باید دیتابیسو از یه برنامه مثل sql expert بسازم؟ یا همین تو هم میشه متون رو کپی کرد؟ با برنامه ای که معرفی کردم توی پست کار با دیتابیس آماده کار کنید

poorman
جمعه 28 آذر 1393, 23:52 عصر
آقا ما یه دیتابیس sqlite داریم
چه جوری به لیست ویو خودمون حالی کنیم که مثلا آقا شما فقط بیا ردیف های مثلا ۱ و ۳و ۷ و ۸ جدول رو بگیرو و نشون بده و و با باقی ردیف ها کار نداشته باش؟

سلام

شما باید اینکار رو با کوئری انجام بدید، یعنی برای کوئری تون شرط بذارید

بگید جایی که آیدی برابر 1 یا 3 یا 7 یا 8 هست رو برگردونه

Apriliyaa
یک شنبه 30 آذر 1393, 13:48 عصر
سلام

شما باید اینکار رو با کوئری انجام بدید، یعنی برای کوئری تون شرط بذارید

بگید جایی که آیدی برابر 1 یا 3 یا 7 یا 8 هست رو برگردونه
یک مثال در این زمینه می زنید
یا کدهاشو قرار می دید؟

poorman
یک شنبه 30 آذر 1393, 17:52 عصر
یک مثال در این زمینه می زنید
یا کدهاشو قرار می دید؟

Cursor c = mydb.rawQuery("select * from table where id = 1 or id = 3 or id = 7", null);

Lulzsec
یک شنبه 30 آذر 1393, 18:19 عصر
سلام
از اون جایی که sqlite asset helper تو صفحه اصلیش فقط آموزش برای eclipse داده؛ برای استفاده از "دیتابیس آماده SQLit" (لایبرری) در android studio 1.0 باید چی کار کرد؟
چون پوشه های android studio 1.0 فرق میکنه، مثلا پوشه libs نداره که بخوایم database رو اونجا بزاریم.
باید از ابزار دیگه ای استفاده کنیم؟ آموزش دیگه ای داره؟

poorman
یک شنبه 30 آذر 1393, 19:20 عصر
سلام
از اون جایی که sqlite asset helper تو صفحه اصلیش فقط آموزش برای eclipse داده؛ برای استفاده از "دیتابیس آماده SQLit" (لایبرری) در android studio 1.0 باید چی کار کرد؟
چون پوشه های android studio 1.0 فرق میکنه، مثلا پوشه libs نداره که بخوایم database رو اونجا بزاریم.
باید از ابزار دیگه ای استفاده کنیم؟ آموزش دیگه ای داره؟

سلام

بنده چون هنوز با اندروید استودیو کار نکردم اطلاعی در این زمینه ندارم
به نظرم هنوز زوده برای سوئیچ کردن روی اندروید استودیو، ولی خب کاریه که بالاخره باید انجامش بدیم

چنانچه کار کردم حتما آموزشش رو قرار میدم

#root#
یک شنبه 30 آذر 1393, 19:54 عصر
سلام
از اون جایی که sqlite asset helper تو صفحه اصلیش فقط آموزش برای eclipse داده؛ برای استفاده از "دیتابیس آماده SQLit" (لایبرری) در android studio 1.0 باید چی کار کرد؟
چون پوشه های android studio 1.0 فرق میکنه، مثلا پوشه libs نداره که بخوایم database رو اونجا بزاریم.
باید از ابزار دیگه ای استفاده کنیم؟ آموزش دیگه ای داره؟

سلام
این که خیلی آسونتره ، اگر دقت کنید نوشته چجوری به پروژتون اضافه کنید > لینک (https://github.com/jgilfelt/android-sqlite-asset-helper#setup) ، فایل build.gradle رو باز کنید و خطی که نوشته رو بهش اضافه کنید، حالا اون بالا یه نوار زرد رنگ میاد که انتهای نوار نوشته Sync Now با انتخابش کتابخونه از اینترنت دانلود و به پروژه اضافه میشه و میتونید استفاده کنید، البته برای پروژه های بعدی به نظر نیاز به اینترنت هم نیست.

Lulzsec
یک شنبه 30 آذر 1393, 20:55 عصر
سلام
این که خیلی آسونتره ، اگر دقت کنید نوشته چجوری به پروژتون اضافه کنید > لینک (https://github.com/jgilfelt/android-sqlite-asset-helper#setup) ، فایل build.gradle رو باز کنید و خطی که نوشته رو بهش اضافه کنید، حالا اون بالا یه نوار زرد رنگ میاد که انتهای نوار نوشته Sync Now با انتخابش کتابخونه از اینترنت دانلود و به پروژه اضافه میشه و میتونید استفاده کنید، البته برای پروژه های بعدی به نظر نیاز به اینترنت هم نیست.

خیلی خب حالا اومدیم تا اینجای کار این مراحل رو انجام دادیم،حالا چند تا سوال:
1. database خودمون رو کجا بزاریم؟
2. یه سری قوانین بود مثل، zip کردن database خودمون و ... ؛ در مورد اونا باید چی کار کرد؟
3. مثلا گفته بودن یه پوشه assets بسازین یا یه پوشه database بعد db تون را در اون قرار بدید، در مورد اینا چی؟

Apriliyaa
چهارشنبه 03 دی 1393, 22:13 عصر
دوستان این main منه :

package ir.apriliyaa.book;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;


import ir.esfandune.database.DBAdapter;
import ir.esfandune.database.apy;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.app.ListActivity;
import android.content.Intent;


public class Main extends ListActivity {
DBAdapter db;
List<apy> apyha;
ListView lst;


boolean isAll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button btn_about = (Button) findViewById(R.id.main_about);
ImageButton btn_sett = (ImageButton) findViewById(R.id.main_setting);

isAll =true;
lst = getListView();
db = new DBAdapter(getBaseContext());
db.open();
Log.i(DBAdapter.TAG, "3");
apyha = db.getAllContacts();
Log.i(DBAdapter.TAG, "4");

if (apyha.size() == 0) {

String destPath = "/data/data/" + getPackageName() + "/databases";

try {
CopyDB(getBaseContext().getAssets().open("mydb"),
new FileOutputStream(destPath + "/apyha"));
Log.i(DBAdapter.TAG, "db copy shod");
apyha = db.getAllContacts();

refreshDisplay();
Log.i(DBAdapter.TAG, apyha.size() + "= tedad apyha");




} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


} else {
refreshDisplay();
}


{


btn_about.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
Intent next = new Intent(getBaseContext(), About.class);
startActivity(next);


}
});

btn_sett.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
Intent next = new Intent(getBaseContext(), Setting.class);
startActivity(next);


}
});

}

}


@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);


apy apy = apyha.get(position);
Intent next = new Intent(this, ShowData.class);
next.putExtra("thisapy", apy);
startActivity(next);


}



public void CopyDB(InputStream inputStream, OutputStream outputStream)
throws IOException {

byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}





public void refreshDisplay() {
Log.i(DBAdapter.TAG, apyha.size() + "= tedad apyha");




ArrayAdapter<apy> adapter = new apyAdapter(this, apyha);
setListAdapter(adapter);
}


@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (isAll) {
apyha = db.getAllContacts();
}else {
apyha=db.findFAVContacts();
}

refreshDisplay();
}
}




مشکل اینجاست که میاد و از دیتابیس می خونه و هر چی هست تو لیست ویو نشون میده !

اما من می خوام مثلا جوری تنظیم بشه که از تیبل ما فقط ستون های 2 و 3 و 4 و 6 رو بخونه

چی کار باید بکنم؟
منو کلافه کرده !

poorman
پنج شنبه 04 دی 1393, 03:07 صبح
دوست عزیز، من فکر میکنم شما آشنایی لازم با دیتابیس رو ندارید
شما توی main هیچ کدی برای خوندن از دیتابیس ندارید و فقط دارید یک تابع رو صدا میزنید

apyha = db.getAllContacts();

این تابع از اسمش معلومه که داره تمام کانتکت ها رو برمیگردونه، توقع معجزه که ندارید، دارید؟

باید کدهای داخل این تابع رو تغییر بدید دوست عزیز

m_jafari_1370
دوشنبه 08 دی 1393, 13:30 عصر
سلام دوستان
مرسی از راهنمایی های عالی همه
من یه سوال دارم، ببینید ما یه اپلیکیشن میسازیم توشم از دیتابیس استفاده میکنیم خیلی عالی. مشکل من این هست که وقتی برنامه روی یه گوشی جدید نصب میشه دیتابیس خام روی اون گوشی نصب میشه، یه راهکاری وجود داره که نرم افزار با اطلاعات درون دیتابیسش روی گوشی موردنظر نصب بشه؟
آیا باید تمام اطلاعات دیتابیس رو بوسیه کد sql و insert ، توی کدمون وارد کنیم؟ یا میشه یه دیتابیس بسازیم بگیم آقای نرم افزار محترم، پس از نصب برنامه این هم دیتابیست هست که این اطلاعات هم توشه حالا ازش استفاده کن توی نرم افزار
ممنون از پاسخگوییتون

poorman
دوشنبه 08 دی 1393, 23:27 عصر
سلام دوستان
مرسی از راهنمایی های عالی همه
من یه سوال دارم، ببینید ما یه اپلیکیشن میسازیم توشم از دیتابیس استفاده میکنیم خیلی عالی. مشکل من این هست که وقتی برنامه روی یه گوشی جدید نصب میشه دیتابیس خام روی اون گوشی نصب میشه، یه راهکاری وجود داره که نرم افزار با اطلاعات درون دیتابیسش روی گوشی موردنظر نصب بشه؟
آیا باید تمام اطلاعات دیتابیس رو بوسیه کد sql و insert ، توی کدمون وارد کنیم؟ یا میشه یه دیتابیس بسازیم بگیم آقای نرم افزار محترم، پس از نصب برنامه این هم دیتابیست هست که این اطلاعات هم توشه حالا ازش استفاده کن توی نرم افزار
ممنون از پاسخگوییتون

با سلام

دوست عزیز برای اینکه اطلاعات رو از قبل توی دیتابیس بریزید، صفحه اول همین تاپیک، آموزش دیتابیس آماده رو مطالعه کنید

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

naserzadeh
پنج شنبه 11 دی 1393, 17:07 عصر
با سلام
من اومدم دیتابیس را به لیست ویو وصل کردم آلانم هیچ مشکلی ندارم
توی لیست ویو من چند تا آیکن گذاشتم که یکی برایش اینه که وقتی کاربر روش کلیک کرد مقدار ستون fav که بصورت پیش فرض 0 گذاشتم 1 بشه؟

حالا فقط موندم چجوری شماره آی دی این قسمت از لیست ویو را انتخاب کنم ؟؟؟

منظور کلی اینه که با توجه به اینکه لیست ویو هستش چجوری مقدار آیتم مربوطه را بگیرم و بعدش دستور sql بکار ببرم که وقتی کاربر روی آیکن مربوط به هر آیتم کلیک کرد شما فقط برو مقدار fav مربوط به اون آیتمو تغییر بده نه همه لیست ویو را ؟؟؟؟؟؟

poorman
پنج شنبه 11 دی 1393, 17:39 عصر
با سلام
من اومدم دیتابیس را به لیست ویو وصل کردم آلانم هیچ مشکلی ندارم
توی لیست ویو من چند تا آیکن گذاشتم که یکی برایش اینه که وقتی کاربر روش کلیک کرد مقدار ستون fav که بصورت پیش فرض 0 گذاشتم 1 بشه؟

حالا فقط موندم چجوری شماره آی دی این قسمت از لیست ویو را انتخاب کنم ؟؟؟

منظور کلی اینه که با توجه به اینکه لیست ویو هستش چجوری مقدار آیتم مربوطه را بگیرم و بعدش دستور sql بکار ببرم که وقتی کاربر روی آیکن مربوط به هر آیتم کلیک کرد شما فقط برو مقدار fav مربوط به اون آیتمو تغییر بده نه همه لیست ویو را ؟؟؟؟؟؟

سلام

شما باید علاوه بر آرایه اصلی که به آداپتر میفرستین، یک آرایه آیدی ها رو هم بفرستید تا بتونید بهشون با position دسترسی داشته باشید

naserzadeh
پنج شنبه 11 دی 1393, 17:54 عصر
تشکر اوکی شد
حالا اگه بخوام بگم مثلا ای آیتمی که مقدار شما 1 هستش مقدرا آیکن شما ستاره زرد هستش و آیتمی که مقدار fav 0 هستش مقدرا آیکن شما باشه ستاره مشکی :بامزه:
که دائمی باشه مگر اینکه مقدار دوباره برعکس بشه!!!
در حالت عادی ستاره عوض میشه ولی دستور sql کار نمیکنه اگه میشه ببینید مشکل کد من کجاست

btnfav.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
int id = adapter.getPosition(item);
G.database = SQLiteDatabase.openOrCreateDatabase(G.DIR_APP + "/dbkalam.sqlite", null);
G.database.execSQL("UPDATE tbl_kalam SET fav =1 WHERE rowid = " + id);

if (id == 0) {
btnfav.setImageResource(R.drawable.fav_off);
} else {
btnfav.setImageResource(R.drawable.fav_on);
}
}

});

adapter.notifyDataSetChanged();
}
}

poorman
پنج شنبه 11 دی 1393, 22:47 عصر
در اینصورت باید یک آرایه از حالت های لایک هم بفرستید
به این صورت که مشخص باشه لایک هر آیتم صفر هست یا یک

بعد تمام اینا رو باید با شرط کنترل کنید دوست عزیز
بگید اگر لایکش صفر هست این عکس اگر یک هست این عکس
و وقتی روی دکمه کلیک میشه اگر لایکش صفر هست آپدیت کن یک بشه، اگر یک هست آپدیت کن صفر بشه

یک نمونه برنامه برای لایک توی تاپیک نمونه برنامه ها هست، میتونید از اون استفاده کنید

m_jafari_1370
جمعه 12 دی 1393, 12:25 عصر
آقا یکی به من بگه من چه گلی به سرم بگیرم...
ببینید داستان از این قراره:

db = new DBAdapter(this);
db.open();
imp.setText(mokhatab.getImp());

String sid=mokhatab.getsenfid();
senfid.setText(db.execSQL("SELECT " + DBAdapter.SENF_NAME + " FROM " + DBAdapter.DATABASE_SENFTABLE + " WHERE " + DBAdapter.SENF_ROWID + " = " + sid ););

یه دیتابیس دارم به نام db همونطور که میبینید، قطعه کد imp.setText(mokhatab.getImp()); خیلی قشنگ میاد این imp رو میگیره و میذاره توی ویوی من.
حالا قصد دارم به این بفهمونم که داداش من، وقتی میخوای senfid رو settext کنی، بیا برو ببین این senfid که ریختیش توی sid برابر چه ردیفی از نام جدول DATABASE_SENFTABLE هست، اون نام رو بجای عدد برای من settext کن.
نمیفهمه، منم نمیتونم بهش بفهمونم...
یکی راهنمایی کنه توروخدا
ممنون

poorman
جمعه 12 دی 1393, 15:42 عصر
سلام

مشکل شما توی خوندن از جدول هست
کوئری شما درسته، اما نحوه خوندن درست نیست

شما باید با دستور db.rawQuery اطلاعات برگشتی رو بریزید توی Cursor و بعد از توی Cursor بخونید اطلاعات رو

به اولین پست همین تاپیک، قسمت خوندن اطلاعات مراجعه کنید

naserzadeh
جمعه 12 دی 1393, 19:28 عصر
من توی دیتابیس یک فیلد آیدی دارم که بصورت اتوماتیک آیدی میده حالا اگه من بیام این دیتابیسو به لیست ویو اتصال بدم برای بدست آوردن مقدار id هر آیتم از چه دستوری استفاده کنم!!!!!!!!

poorman
جمعه 12 دی 1393, 19:54 عصر
من توی دیتابیس یک فیلد آیدی دارم که بصورت اتوماتیک آیدی میده حالا اگه من بیام این دیتابیسو به لیست ویو اتصال بدم برای بدست آوردن مقدار id هر آیتم از چه دستوری استفاده کنم!!!!!!!!

خدمتتون عرض کردم، باید علاوه بر مقادیری که میخواین نمایش بدید ( که داخل یک آرایه معمولا به آداپتر فرستاده میشه ) باید آیدی ها رو هم توی یک آرایه به آداپتر بفرستید تا بتونید به آیدی دسترسی داشته باشید

نمونه برنامه افزودن به علاقه مندی ها رو توی تاپیک نمونه برنامه ها ببینید

naserzadeh
جمعه 12 دی 1393, 20:43 عصر
کجای این کد باید همچین کاری انجام بدم؟؟!!!!!!!!!!


public class AdapterApplication extends ArrayAdapter<StructApplication> {

public AdapterApplication(ArrayList<StructApplication> array) {
super(G.context, R.layout.adapter_mohtava, array);

}


private static class ViewHolder {

public ViewGroup layoutRoot;
public TextView txtmohtava;
public ImageView imgShare;
public ImageButton btnfav;
int id;


public ViewHolder(View view) {
txtmohtava = (TextView) view.findViewById(R.id.txtmohtava);
layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot);
imgShare = (ImageView) view.findViewById(R.id.imgShare);
btnfav = (ImageButton) view.findViewById(R.id.btnfav);
}


public void fill(final ArrayAdapter<StructApplication> adapter, final StructApplication item, final int position) {
txtmohtava.setText(item.mohtava);

btnfav.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
// item.don = imageButton.isClickable();
int id = adapter.getPosition(item);
G.database = SQLiteDatabase.openOrCreateDatabase(G.DIR_APP + "/dbkalam.sqlite", null);
G.database.execSQL("UPDATE tbl_kalam SET fav =1 WHERE rowid = " + id);
Toast.makeText(G.context, "به علاقه مندی اضافه شد", Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
/*
if (item.don) {
btnfav.setImageResource(R.drawable.fav_off);
} else {
btnfav.setImageResource(R.drawable.fav_on);
}*/
}
});

/*
if (item.don) {
btnfav.setImageResource(R.drawable.fav_off);
} else {
btnfav.setImageResource(R.drawable.fav_on);
}*/

//adapter.notifyDataSetChanged();
}
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

StructApplication item = getItem(position);
if (convertView == null) {
convertView = G.layoutInflater.inflate(R.layout.adapter_mohtava, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.fill(this, item, position);
return convertView;
}

}

poorman
جمعه 12 دی 1393, 22:20 عصر
دوست عزیز اینطوری من متوجه نمیشم شما چی نوشتید و نمیتونم راهنمایی تون کنم

شما به نظر میرسه از پایه با آداپتر و لیست ویو آشنایی کامل ندارید وگرنه منظور بنده رو متوجه میشدید

شما دارید یک لیست از StructApplication میفرستید، که mohtava رو نمایش میدید
اگر آیدی داره، از اون آیدی استفاده کنید، اگر نداره بهش اضافه کنید

شرمنده بیشتر از این فکر نکنم بتونم راهنمایی کنم

m_jafari_1370
یک شنبه 14 دی 1393, 11:01 صبح
دوستان عزیز من یه تیکه کد دارم به این صورت:


public class MokhatabAdapter extends ArrayAdapter<Mokhatab> {

public MokhatabAdapter(Context c, List<Mokhatab> mokhatabha) {
super(c, android.R.id.content, mokhatabha);
this.c = c;
this.mokhatabha = mokhatabha;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater vi = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
View view = vi.inflate(R.layout.item, null);
Mokhatab mokhatab = mokhatabha.get(position);

TextView txt_imp = (TextView) view.findViewById(R.id.txt_imp);
txt_imp.setText(mokhatab.getImp());

TextView txt_tel = (TextView) view.findViewById(R.id.txt_tel);
txt_tel.setText(mokhatab.gettel());

TextView txt_email = (TextView) view.findViewById(R.id.txt_email);
txt_email.setText(mokhatab.getMail());

TextView txt_web = (TextView) view.findViewById(R.id.txt_web);
txt_web.setText(mokhatab.getWeb());

return view;
}


List<Mokhatab> mokhatabha;
Context c;
}



خیلی خوش و خرم کار میکنه! حالا مشکل اینجاست که وسط این کد، دقیقا قبل از
TextView txt_imp = (TextView) view.findViewById(R.id.txt_imp);
txt_imp.setText(mokhatab.getImp());
باید به دیتابیسم وصل شم و یه کوئری روش بزنم و نتیجمو بگیرم و چاپ کنم.
حال قابل عرض است که مثلا توی اکتیویتی های دیگم، به راحتی با این تیکه کد میتونم به دیتابیسم وصل شم:
DBAdapter db;
db = new DBAdapter(this);
db.open();
و کارامو روش کنم. ولی توی این کلاس که اکتیویتی نیست نمیتونم وصل شم و بهم ارور میده... (فکر کنم مشکل از همین this هست که منم هیچوقت نتونستم باهاش ارتباط برقرار کنم!!!)
البته این کد رو دراصل من از سایتی گرفتم و از نویسندش که پرسیدم خیلی مختصر این جواب رو بهم داده که بازم سواد من نمیکشه چی گفته!!! بنده خدا در جواب اینکه چجوری به دیتابیس وصل شم گفته که:
(((
فرقی نداره مثل جاهای دیگه هست فقط برای context نمیشه مثل اکتیویتی باهاش رفتار کرد . باید مقدار context ی که داخل آداپتر میگیرید رو هنگام تعریف DbAdapter استفاده کنید
Dbadapter(contextname) که احتمال زیاد نامش c باشه )))
اگر بتونید مشکل منو حل کنید ممنون میشم، خصوصا آقا poorman که همیشه مزاحمش میشم...
اگرم به اطلاعات بیشتری نیاز هست تا عرض کنم خدمتتون...

poorman
یک شنبه 14 دی 1393, 11:29 صبح
سلام
توی همین کلاس آداپترتون با همین کدی که دارید یک متغیر عمومی به شکل زیر تعریف کنید:
Context c;

بعد هرجا که خواستین دیتابیس رو فراخوانی کنید به جای this بنویسید c

DBAdapter db;
db = new DBAdapter(c);
db.open();



حالا توضیح بیشتر اینکه، شما برای خوندن از دیتابیس نیاز دارید مشخص کنید از چه اکتیویتی این درخواست داره داده میشه.
اینکه توی چه اکتیویتی هستیم همون Context ماست که معمولا با this یا activityName.this مقداردهی میکنیم.

حالا توی آداپتر همونطور که گفتید چون کلاسی از جنس اکتیویتی نیست، نمیشه با this کار کرد
بنابراین نیاز هست که اکتیویتی رو به این کلاس بفرستیم
توی تابع اصلی آداپتر شما دو تا ورودی دارید، یکی Context c و یکی لیست مخاطبین
این c همون اکتیویتی ماست
حالا برای اینکه بتونیم ازش استفاده کنیم باید مقدارش به صورت عمومی ذخیره بشه

امیدوارم تونسته باشم خوب توضیح بدم

m_jafari_1370
یک شنبه 14 دی 1393, 19:14 عصر
اینقدر پاسخت برام ارزش داشت که به لایک بسنده نکردم، ترجیح دادم پست برات بزنم داش
poorman
ممنون و سپاس
راستی یه راهی آموزشی چیزی واسه خوشکل کردن لیست ویو داری بهمون بدی؟

poorman
یک شنبه 14 دی 1393, 19:50 عصر
خواهش میکنم :لبخندساده:

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

همه چیز برمیگرده به دیزاین و طراحی برنامه :چشمک:

m_jafari_1370
پنج شنبه 18 دی 1393, 09:59 صبح
سلام بزرگان
یکی این قطعه کد رو واسه من شرح بده!!! (فکرکنم مخاطبم Mr. poorman عزیز است!!!) و ترجیحا مشکلشو بگه!



String[] allsenfs;
Spinner spinner = (Spinner) findViewById(R.id.spinner1);
Cursor e = db.fetchAllsenfname();
int i=0;
if(e.moveToFirst()){
do{
allsenfs[i] = e.getString(i);
i++;
}
while(e.moveToNext());
}
e.close();
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,i, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.s imple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);


این کد رو از گوگل گرفتم!!! البته مثال گوگل گفته بود که یه string-array به نام planets_array داخل strings.xml بسازید و اطلاعات موجود در اسپینر رو از توی اون بخونید. که بواسطه اون هم آرگومان دوم تابع createFromResource رو R.array.planets_array تعریف کرده بود.
خب حالا من اومدم که با تابع fetchAllsenfname که یه کوئری میزنه روی دیتابیس و تمام اطلاعات رو با Cursor میاره تبدیل کنم به یک string-array و این اطلاعات رو توی اسپینر نمایش بدم. ولی بهم اررور میده، لطفا اگر وقت دارید و میتونید راهنماییم کنید...
(خدا بخیر کنه بقیه ماجرا رو که بخوام روش سرچ هم بذارم!!!)

poorman
پنج شنبه 18 دی 1393, 16:33 عصر
سلام

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

allsenfs[i] = e.getString(i);

شما دارید خونه i ام از cursor رو میخونید در حالی که i هر سری داره یکی اضافه میشه
بنابراین وقتی اندازه i از تعداد ستون های cursor بیشتر بشه خطا میگیرید

باید ستون مشخص خودتون رو بخونید، مثلا ستون 0 ( کاملا بستگی داره به اینکه توی cursor چه چیزی هست )

m_jafari_1370
پنج شنبه 18 دی 1393, 21:48 عصر
آقا poorman ، شما توی این قطعه کد مشکلی میبینی؟

public Cursor fetchsenfid(String sname) {
Log.i("mylog", "raftim too fetchsenfid va sname is = "+sname);
return db.rawQuery("SELECT " + SENF_ROWID + " FROM " + DATABASE_SENFTABLE + " WHERE " + SENF_NAME + " = " + sname ,null);
//return db.query(DATABASE_SENFTABLE, new String[] {SENF_ROWID} , SENF_NAME + " = " + sname , null, null, null,null);
}

هر کدوم از دوتا return ها رو میزنم SQLiteDatabaseCpp بهم ارور میده که:
sqlite returned: error code = 1, msg = no such column: s1, db=/data/data/ir.esfandune.Databases/databases/MyDB
البته اینم توضیح بدم که sname توی این انتخاب مقدار s1 میگیره که توی دیتابیس هم هستش!!!، همچنین DATABASE_SENFTABLE اینگونه است:

// DATABASE_SENFTABLE Columns
static final String SENF_ROWID = "senf_id";
static final String SENF_NAME = "senfname";
static final String CREATE_SENFTABLE = "create table " + DATABASE_SENFTABLE +"("+ SENF_ROWID + " integer primary key autoincrement, " + SENF_NAME + " text not null);";






یکی نیست بگه بچه خجالت بکش از بس از این Mr. poorman میپرسی!!!

poorman
پنج شنبه 18 دی 1393, 23:48 عصر
تنها مشکلی که اینجا به چشمم میخوره اینه که چیزی که شما دارید براش جستجو میکنید رو به صورت رشته وارد نکردید و بدون کوتیشن قرار دادید

کوئری زیر در صورتی که جدول شما ساخته شده باشه نباید خطایی بده

return db.rawQuery("SELECT " + SENF_ROWID + " FROM " + DATABASE_SENFTABLE + " WHERE " + SENF_NAME + " = '" + sname + "'" ,null);

m_jafari_1370
یک شنبه 21 دی 1393, 15:16 عصر
آقا poorman جان
من دارم قطعه کدم رو میذارم توی یه پروژه دیگه که هم قشتگتره هم اینکه اسلایدرمنو داره. تست کردم خوب جلو میره فقط یجاش مشکل دارم:
ببینید کد من این بود اولش:
public class DatabasesActivity extends ListActivity {
به همین خاطرم میتونستم از توایعی همچون setListAdapter به راحتی استفاده کنم. حالا کد این پروژه این هست اولش:
public class MainActivity extends Activity {
یعنی توی کدی که لیست ویوویی برای اجرای اسلاید منو داره از extends Activity اسفاده شده ودرحالی است که من extends ListActivity نیاز دارم.
حالا اومدم توی اسلایدر Avtivity رو به ListActivity تبدیل کردم، لاگ گرفتم دیدم تا زمانیکه وارد فایل xml نمیشه مشکل نداره، به محض ورود به xml خراب میشه و force close میده...
فایل های xml رو مقایسه کردم دیدم لیست ویو به دو مول id گرفته:
1: لیست ویوی موجود در extends ListActivity اینه:
android:id="@android:id/list"
2:لیست ویوی موجود در extends Activity این هست:
android:id="@+id/list_slidermenu"
من تفاوت این دوتا رو نفهمیدم، هرقدرم سعی کردم حالت دوم رو مثل حالت اول مقدار دهی کنم نشد... اکلیپس اررور میده میگه که:
Error: No resource found that matches the given name (at 'id' with value '@android:id/list_slidermenu')
دوستان کسی هست بتونه منو راهنمایی کنه بزرگان؟ من باید چکار کنم؟!

poorman
یک شنبه 21 دی 1393, 19:35 عصر
جناب جعفری عزیز

لطفا از این به بعد توی این تاپیک فقط سوال های مربوط به دیتابیس رو مطرح کنید. متشکرم

و اما جواب سوالتون: وقتی کلاس شما از listActivity ارث بری کنه توی صفحه xml فقط باید لیست ویو باشه، حتی میتونید xml هم نداشته باشید
در این حالت صفحه شما فقط یک لیست رو نمایش میده

اما وقتی از اکتیویتی ارث بری میکنید یک layout رو setContentView میکنید
ابتدای متد onCreate باید بگید

setContentView(R.layout.yourLayoutName);

بعدش میتونید لیست ویو رو با آیدی که براش توی xml دادید، مشخص کنید و آداپترش رو بهش بدید

alireza142
پنج شنبه 25 دی 1393, 09:29 صبح
با سلام و خسته نباشید

من یه جدولی مثل تصویر زیر دارم (جدول اولیه) که می خوام یک لیست جدیدی از اون تهیه کنم به صورتی که در این لیست جدید به تعداد عدد موجود در ستونی با عنوان (Count) ، اسامی رو تکرار کنه . یعنی بشه مثل جدول موردنیاز در تصویر زیر.


127570

حالا هر چی کد زیر رو میزنم، صحیح کار نمیکنه و خروجی که در لیست ویو نمایش میده غلطه.


public ArrayList<String> GetList() {

ArrayList<String> List = new ArrayList<String>(0);

Cursor c = mydb.rawQuery("select * from TABLE " , null);

for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);

int T = c.getInt(c.getColumnIndex("Count"));

for (int j = 0; j < T; j++) {

List.add(c.getString(c.getColumnIndex("Name")));

}
}
c.close();

return List;
}



میشه لطفا بفرمایید کجای کوئری که به بانک میزنم ایراد داره؟
با سپاس...

poorman
پنج شنبه 25 دی 1393, 14:31 عصر
سلام آقا علیرضا

والا من توی این کدها خطایی نمیبینم
خروجی بهتون چی میده؟

مطمئن بشید که اطلاعات جدولتون درست هست و آپدیت شده

alireza142
شنبه 27 دی 1393, 10:38 صبح
آقا ممنون . مشکلم حل شد.
اشکال از کوئری نبود؛ من در یک اکتیویتی دو تا لیست ویو (سفارشی) رو باهم نشون میدادم. حالا در قسمت آداپتور ، فقط از یک کلاس آداپتور برای نمایش هر دو تا لیست استفاده می کردم و این بود که اشتباه نشون میداد. حالا برای هرلیست یک آکلاس داپتور جدید در همون اکتیویتی ساختم و دیگه مشکل حل شد.:چشمک:

پس در کل درسته که بگیم نمیشه برای دوتا لیست ویو که مقادیر لیست متفاوتی رو قراره نشون بدن، از یک آداپتور استفاده کرد؟؟

poorman
شنبه 27 دی 1393, 16:28 عصر
پس در کل درسته که بگیم نمیشه برای دوتا لیست ویو که مقادیر لیست متفاوتی رو قراره نشون بدن، از یک آداپتور استفاده کرد؟؟

در صورتی که ساختار لیست های شما یکی باشه میشه از یک کلاس آداپتر استفاده کرد ( مثلا هر دو تا فقط تکست رو نمایش میدن )

اما برای اینکه مشکلی پیش نیاد شما باید برای آداپتر هر لیست، یک آبجکت جدید از کلاس آداپترتون براش بسازید ( مثلا آداپتر 1 و 2 )

ghasem110deh
پنج شنبه 09 بهمن 1393, 16:52 عصر
سلام
توی sqlite چطور میشه مثل sql ویو ، پروسیجر و با ... رو ایجاد کرد ؟
یا پسورد گذاشت ؟

Apriliyaa
پنج شنبه 09 بهمن 1393, 17:59 عصر
سلام
لینکی معرفی می کنید که در مورد کد کردن دیتابیس sqlite در برنامه نویسی اندروید بحث شده باشه
ترجیها در انجمن های فارسی و در اکلیپس
ممنون

poorman
جمعه 10 بهمن 1393, 01:34 صبح
سلام
توی sqlite چطور میشه مثل sql ویو ، پروسیجر و با ... رو ایجاد کرد ؟
یا پسورد گذاشت ؟

سلام

تا جایی که بنده اطلاع دارم این قابلیت ها توی sqlite وجود نداره
باز هم برای پروسیجر مطمئن نیستم
ولی قطعا پسوورد نمیتونید بذارید

poorman
جمعه 10 بهمن 1393, 01:36 صبح
سلام
لینکی معرفی می کنید که در مورد کد کردن دیتابیس sqlite در برنامه نویسی اندروید بحث شده باشه
ترجیها در انجمن های فارسی و در اکلیپس
ممنون

سلام

دیتابیس توی اندروید امنیت نداره و روش قابل اطمینانی برای این کار نیست
یک ابزار به اسم سیفر بود فکر کنم که توی همین انجمن راجع بهش بحث شده بود، اما آخرش نتیجه درستی نداشت مبحث

درکل تا جایی که بنده اطلاع دارم، دیتابیس رو هرکاریش کنید بازم در میاد
تنها راهتون برای امنیت اینه که دیتاهاتون لوکال نباشه و داخل سرور باشه

ghasem110deh
جمعه 10 بهمن 1393, 12:22 عصر
سلام

تا جایی که بنده اطلاع دارم این قابلیت ها توی sqlite وجود نداره
باز هم برای پروسیجر مطمئن نیستم
ولی قطعا پسوورد نمیتونید بذارید

چرا دیگه ... میشه ! (گذاشتن پسورد روی sqlite)

http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx

poorman
شنبه 11 بهمن 1393, 10:20 صبح
چرا دیگه ... میشه ! (گذاشتن پسورد روی sqlite)

http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx

دوست عزیز این برای سی شارپ و برنامه نویسی ویندوز هست، من توی اندروید و جاوا تا حالا ندیدم !!!
دیتابیس شما به هر شکلی که باشه در دسترس بقیه قرار میگیره و میتونه اطلاعاتش رو ببینه
روی خود دیتابیس نمیتونید پسوورد بذارید اما میتونید محتوا و اطلاعات داخل اون رو انکریپت یا رمزگذاری کنید.

poorman
شنبه 11 بهمن 1393, 10:24 صبح
این لینک رو یک چک بکنید
https://guardianproject.info/code/sqlcipher/

برای دیتابیس ران تایم راهکار داده، اما برای دیتابیس از پیش ساخته شده راهکاری نداده

ghasem110deh
شنبه 11 بهمن 1393, 17:17 عصر
ممنون
توی برنامه های ویندوزی که هیچکی انگار کار نکرده با sqlite ...
هر چی سرچ میزنی واسه برنامه های موبایله !
رو موبایل و نمیدونم ولی رو ویندوز که راحت میشه جداول و دید ؟
یعنی عقلشون به اینجا نرسیده که یه قفل ساده مثل access روش بزارن ؟
رو sql server هم همینطوره ... واسه یه برنامه انبارداری ساده کلی دنگ و فنگ واسه رمزگذاری و رمزگشایی داری !!!

dariush110
یک شنبه 19 بهمن 1393, 15:02 عصر
با سلام

آقای poorman (http://barnamenevis.org/member.php?295320-poorman) اگه امکان داره یه نمونه پروژه ساده که در آن از insert , delete و وارد کردن عکس در پایگاه داده استفاده شده بزارید

مرسی

m_jafari_1370
یک شنبه 19 بهمن 1393, 18:18 عصر
آقا poorman عزیز یه سر به این پست میزنی؟
اتفاقا دیتابیسی هم هست
ممنون

http://barnamenevis.org/showthread.php?485394-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D9%88%D8%B1%D9%88%D8%AF-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-sqlite

poorman
یک شنبه 19 بهمن 1393, 21:17 عصر
آقا poorman عزیز یه سر به این پست میزنی؟
اتفاقا دیتابیسی هم هست
ممنون

http://barnamenevis.org/showthread.php?485394-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D9%88%D8%B1%D9%88%D8%AF-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-sqlite

سلام

بنده تا حالا به هیچ مشکلی توی فارسی وارد کردن برنخوردم
از نرم افزار SQLite Database browser استفاده کنید

https://github.com/sqlitebrowser/sqlitebrowser/releases

فایل exe رو بگیرید

poorman
یک شنبه 19 بهمن 1393, 21:17 عصر
با سلام

آقای poorman (http://barnamenevis.org/member.php?295320-poorman) اگه امکان داره یه نمونه پروژه ساده که در آن از insert , delete و وارد کردن عکس در پایگاه داده استفاده شده بزارید

مرسی

سلام

متاسفانه فرصت کافی ندارم
ایشالا اگر وقت کردم چشم

dariush110
جمعه 24 بهمن 1393, 15:18 عصر
با سللم
اگه میشه روش استفاده از setOnItemClickListener در لیست سفارشی آموزش بدین
وقتی که روی آیتمی کلیک شه بره تو دیتابیس id فرستاده شده از لست ویو را به صفحه دیگر ببره و تون صفحه اطلاعات مربوط به اون id رو نمایش بده

مرسی اگه کمک کنین:تشویق:

rainbow17
جمعه 24 بهمن 1393, 21:11 عصر
با سلام دوباره خدمت poor man عزیز...

ممنون از تاپیک
خوبتون..

اگه بخوام عکسهای کنار هر آیتم توی لیست ویو رو تغییر بدم و هر کدوم یه imageView متفاوت کنارش باشه،چه کدی رو باید توی کلاس دیتا بیس اضافه اضافه کنم؟؟

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

من عکس هامو تو پوشه drawable ریختم ،بعد توی دیتا بیسم یه فیلد با عنوان picture اضافه کردم که اسم عکس ها رو با اسم عکس های توی پوشه drawable یکی گذاشتم، کد های دیتابیس و mainactivity که میخواد لیست رو نشون بده میزارم ممنون اگه نگاه کنین و بگین چه کده دیگه لازمه...

rainbow17
جمعه 24 بهمن 1393, 21:11 عصر
با سلام دوباره خدمت poor man عزیز...


ممنون از تاپیک

خوبتون..


اگه بخوام عکسهای کنار هر آیتم توی لیست ویو رو تغییر بدم و هر کدوم یه imageView متفاوت کنارش باشه،چه کدی رو باید توی کلاس دیتا بیس اضافه اضافه کنم؟؟


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


من عکس هامو تو پوشه drawable ریختم ،بعد توی دیتا بیسم یه فیلد با عنوان picture اضافه کردم که اسم عکس ها رو با اسم عکس های توی پوشه drawable یکی گذاشتم، کد های دیتابیس و mainactivity که میخواد لیست رو نشون بده میزارم ممنون اگه نگاه کنین و بگین چه کده دیگه لازمه...

rainbow17
جمعه 24 بهمن 1393, 21:13 عصر
کد های دیتابیسم...




import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHandler extends SQLiteOpenHelper {


public final String path = "data/data/com.kheirimohammad.full_heart/databases/";
private static final String DATABASE_NAME = "full_h";
public SQLiteDatabase mydb;
private final Context mycontext;


// //////table field////////
public final String TABLE ="tbl";
public final String ID = "id";
public final String NAME = "name";
public final String SUB = "sub";
public final String FATHER = "father";
public final String FATHERNAME = "fathername";
public final String NAMEHTML = "namehtml";
public final String PICTURE = "picture";
public final String FAV = "fav";



public DatabaseHandler(Context context) {
super(context, "full_h", null, 1);
mycontext = context;
}


@Override
public void onCreate(SQLiteDatabase arg0) {


}


@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {


}


public void useable() {
boolean checkdb = checkdb();
if (checkdb) {


} else {
this.getReadableDatabase();
try {
copydatabase();
} catch (IOException e) {


}
}
}


public void open() throws SQLException {
mydb = SQLiteDatabase.openDatabase(path + DATABASE_NAME, null,
SQLiteDatabase.OPEN_READONLY);
}


@Override
public void close() {
mydb.close();
}


public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + DATABASE_NAME, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLException e) {


}
return db != null ? true : false;
}


public void copydatabase() throws IOException {


OutputStream myOutput = new FileOutputStream(path + DATABASE_NAME);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(DATABASE_NAME);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}


////


public String[] GetListMain(String field) {


Cursor c = mydb.rawQuery("select * from " + TABLE + " where " + FATHER + " = '0' ORDER BY " + ID , null);


String[] list = new String[c.getCount()];


if (c.moveToFirst()) {
for (int i = 0; i < c.getCount(); i++) {
c.moveToPosition(i);
list[i] = c.getString(c.getColumnIndex(field)).toString();
}
}


return list;
}

public Integer shomaresh_field(String table,String field){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+TABLE+" group by "+field, null);
int i = Cursor.getCount();
return i ;
}

public String namayesh_field (String table , int row){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+TABLE+" group by name",null);
Cursor.moveToPosition(row);
String save = Cursor.getString(1);
return save;

}

public Integer shomaresh_dastan (String table , String name){
Cursor Cursor = mydb.rawQuery("SELECT * FROM "+TABLE+" where season='"+name+"' group by name", null);
int s = Cursor.getCount();
return s;

}
}

rainbow17
جمعه 24 بهمن 1393, 21:19 عصر
اینم کد های main activity:




import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;


public class MainActivity extends ListActivity {


private DatabaseHandler db;
private ListView listview;
private String[] mainlist;
private ArrayAdapter<String> adabter;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


db = new DatabaseHandler(this);
db.getReadableDatabase();
db.useable();
refresher();
setListadapter(new AA());


}


private void setListadapter(AA aa) {

}








class AA extends ArrayAdapter<String> {
public AA() {


super(MainActivity.this,R.layout.item_item_main,ma inlist);


}


@Override
public View getView(int position, View convertView, ViewGroup parent) {


LayoutInflater bazkonande = getLayoutInflater();
View radif = bazkonande.inflate(R.layout.item_item_main, parent,
false);


TextView name = (TextView) radif.findViewById(R.id.tv_nameMaine);
ImageView ax = (ImageView) radif.findViewById(R.id.img_axMaine);


//if (isTablet(getApplicationContext())) {


//}


name.setText(mainlist[position]);



db.open();
String[] axhaName = db.GetListMain(db.PICTURE);
db.close();


int[] cod = new int[axhaName.length];
for (int i = 0; i < axhaName.length; i++) {


cod[i] = Integer.parseInt("R.drawable." + axhaName[i]);
}


ax.setImageResource(cod[position]);


return radif;
}
}



private void refresher(){
db.open();
int save = db.shomaresh_field("tbl", "name");
mainlist = new String[save];

for (int i = 0; i <save; i++) {
mainlist[i] = db.namayesh_field("tbl", i);
}
db.close();
}

rainbow17
جمعه 24 بهمن 1393, 21:25 عصر
راستی اسم ذیتا که توی assets ریختم full_h هستش و اسم table دیتا tbl هستش...ممنون یه نگاه بندازی ببینی درست استفادشون کردم...
اینم item_item_main.xml من....
128437

Sina.iRoid
شنبه 25 بهمن 1393, 07:57 صبح
سلام
ببخشید که من سوالمو اینجا مطرح می کنم. اما واقعا کارم گیره. من یه تعداد عکس دارم که می خوام داخل پایگاه داده ذخیره کنم. اما نمی دونم چه طوری. ممنون میشم اگر راهنماییم کنید.

poorman
شنبه 25 بهمن 1393, 19:07 عصر
با سلام به poor man عزیز...
من عکس هامو تو پوشه drawable ریختم ،بعد توی دیتا بیسم یه فیلد با عنوان picture اضافه کردم که اسم عکس ها رو با اسم عکس های توی پوشه drawable یکی گذاشتم، کد های دیتابیس و mainactivity که میخواد لیست رو نشون بده میزارم ممنون اگه نگاه کنین و بگین چه کده دیگه لازمه...

با سلام

دوست عزیز اگر سایر کدهاتون رو درست نوشته باشید ( یعنی عکس ها رو به درستی از دیتابیس دریافت کنید )
تنها مشکلی که به چشم بنده میخوره این قسمت از آداپتر شماست

for (int i = 0; i < axhaName.length; i++) {


cod[i] = Integer.parseInt("R.drawable." + axhaName[i]);
}



این رو شکل زیر تغییر بدید

for (int i = 0; i < axhaName.length; i++) {


cod[i] = getResources().getIdentifier(axhaName[i], "drawable", getPackageName());

}



در صورتی که خطای دیگه داشتید متاسفانه به دلیل کمبود وقت نمیتونم کمکی کنم
از پرسیدن سوال های نامرتبط با موضوع تاپیک لطفا خودداری کنید

تشکر

poorman
شنبه 25 بهمن 1393, 19:12 عصر
با سللم
اگه میشه روش استفاده از setOnItemClickListener در لیست سفارشی آموزش بدین
وقتی که روی آیتمی کلیک شه بره تو دیتابیس id فرستاده شده از لست ویو را به صفحه دیگر ببره و تون صفحه اطلاعات مربوط به اون id رو نمایش بده

مرسی اگه کمک کنین:تشویق:

با سلام

لطفا از پرسیدن سوالات نامرتبط با موضوع تاپیک خودداری کنید

دوست عزیز بنده میتونم در این مورد شما رو راهنمایی کنم ولی متاسفانه نمونه کد نمیتونم بذارم

شما آرایه ای که دارید توی لیست ویو نمایش میدید رو دارید، حالا نیاز به یک آرایه دیگه برای آیدی ها دارید که ذخیره شون کنید

وقتی روی یک آیتم لیست ویو کلیک میشه با position آیتمی که کلیک شده، از داخل آرایه آیدی ها، آیدی رو بخونید
بعد با استفاده از intent و putExtra مقدار آیدی رو به صفحه دیگه بفرستید و اونجا اطلاعات اون آیدی خاص رو نمایش بدید

poorman
شنبه 25 بهمن 1393, 19:21 عصر
سلام
ببخشید که من سوالمو اینجا مطرح می کنم. اما واقعا کارم گیره. من یه تعداد عکس دارم که می خوام داخل پایگاه داده ذخیره کنم. اما نمی دونم چه طوری. ممنون میشم اگر راهنماییم کنید.

با سلام

عکس های شما به صورت بایت توی دیتابیس ذخیره میشه
باید ابتدا عکس رو تبدیل به bitmap کنید و سپس بایت های عکس رو ذخیره کنید

این نمونه کد insert کردن یک عکس با اسم توی جدول


byte[] img = null;
Bitmap b = null; // your image goes here
ByteArrayOutputStream bos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img = bos.toByteArray();

SQLiteStatement p = mydb.compileStatement("insert into pictures (name, image) values(?, ?)");

p.bindBlob(2, img);
p.bindString(1, "1.jpg");
p.execute();

این هم نمونه کد خواندن


byte[] img = null;
Cursor c = mydb.rawQuery("select * from pictures", null);
if(c.moveToLast()){
img = c.getBlob(2);
}

Bitmap b = BitmapFactory.decodeByteArray(img, 0, img.length);
imgView.setImageBitmap(b);

skkhossein
شنبه 25 بهمن 1393, 20:12 عصر
سلام دوست عزیز
شما با هر دو روش استفاده از دیتا بیس توی اندروید کار کردین هم بدون لایبرری و هم با لایبرری
پیشنهادتون واسه کار با دیتابیس کدوم هست؟
استفاده از لایبرری سرعت دسترسی به دیتابیس رو کم نمیکنه (در صورتی که دیتابیس ما بسیار حجیم باشه)؟

poorman
شنبه 25 بهمن 1393, 20:32 عصر
سلام دوست عزیز
شما با هر دو روش استفاده از دیتا بیس توی اندروید کار کردین هم بدون لایبرری و هم با لایبرری
پیشنهادتون واسه کار با دیتابیس کدوم هست؟
استفاده از لایبرری سرعت دسترسی به دیتابیس رو کم نمیکنه (در صورتی که دیتابیس ما بسیار حجیم باشه)؟

سلام

استفاده از لایبری تاثیری در سرعت نداره
در هر دو صورت به یک روش ارتباط با دیتابیس برقرار میشه، اما لایبری کار شما رو ساده تر میکنه

skkhossein
شنبه 25 بهمن 1393, 20:48 عصر
ای کاش یه ذره این دیتابیس امنیت داشت خیلی از برنامه ها با همین SQLite بازارشون داره خراب میشه یا سوء استفاده میشه

Sina.iRoid
شنبه 25 بهمن 1393, 21:51 عصر
با سلام

عکس های شما به صورت بایت توی دیتابیس ذخیره میشه
باید ابتدا عکس رو تبدیل به bitmap کنید و سپس بایت های عکس رو ذخیره کنید

این نمونه کد insert کردن یک عکس با اسم توی جدول


byte[] img = null;
Bitmap b = null; // your image goes here
ByteArrayOutputStream bos = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img = bos.toByteArray();

SQLiteStatement p = mydb.compileStatement("insert into pictures (name, image) values(?, ?)");

p.bindBlob(2, img);
p.bindString(1, "1.jpg");
p.execute();

این هم نمونه کد خواندن


byte[] img = null;
Cursor c = mydb.rawQuery("select * from pictures", null);
if(c.moveToLast()){
img = c.getBlob(2);
}

Bitmap b = BitmapFactory.decodeByteArray(img, 0, img.length);
imgView.setImageBitmap(b);

سلام
ممنون از راهنماییتون. سوال دیگه اینکه من عکس ها رو داخل فولدر drawable قرار بدم یا جای دیگه؟
ممنون.

poorman
شنبه 25 بهمن 1393, 22:34 عصر
سلام
ممنون از راهنماییتون. سوال دیگه اینکه من عکس ها رو داخل فولدر drawable قرار بدم یا جای دیگه؟
ممنون.

الان من متوجه نشدم دقیقا برای چی میخواین عکس ها رو ذخیره کنین توی دیتابیس؟
اگر توی drawable یا جایی دیگه توی برنامه یا گوشی عکس ها رو دارید، دیگه نیازی نیست خود عکس رو ذخیره کنید، کافیه اسم یا آدرسش رو ذخیره کنید

ذخیره توی دیتابیس موقعی به درد میخوره که بخواین از دیتابیس آماده استفاده کنید و نخواین کاربرها با باز کردن APK عکس هاتون رو ببینن
برای این کار هم قبلا باید دیتابیس رو بسازید و توی برنامه قرار بدید

Sina.iRoid
یک شنبه 26 بهمن 1393, 07:47 صبح
الان من متوجه نشدم دقیقا برای چی میخواین عکس ها رو ذخیره کنین توی دیتابیس؟
اگر توی drawable یا جایی دیگه توی برنامه یا گوشی عکس ها رو دارید، دیگه نیازی نیست خود عکس رو ذخیره کنید، کافیه اسم یا آدرسش رو ذخیره کنید

ذخیره توی دیتابیس موقعی به درد میخوره که بخواین از دیتابیس آماده استفاده کنید و نخواین کاربرها با باز کردن APK عکس هاتون رو ببینن
برای این کار هم قبلا باید دیتابیس رو بسازید و توی برنامه قرار بدید

سلام. می خوام یه سری عکس به طور پیش فرض داخل برنامه باشه. اگر کاربر هم خواست عکس های خودشو رو به برنامه اضافه کنه.

alireza142
جمعه 01 اسفند 1393, 13:44 عصر
سلام به استاد گرامی این تاپیک

یه برنامه توی بازار گذاشتم که البته با بانک sql از پیش آماده کار میکنه و در ابتدا هیچی توش نیست و کاربر اطلاعات توش ایجاد میکنه(همون قرعه کشی فامیلی) . اما متاسفانه یه کمبودی داره برنامه ام و حالا باید در ورژن بعدی به اون بانک اطلاعاتی یک فیلد جدید اضافه کنم. اگه بانک فقط خواندنی بود میدونم که باید ورژن رو یکی بالا میبردم. اما حالا که هم خاندنی است هم نوشتنی و چون نمیخام اطلاعات احتمالی کاربر پاک بشه ، چکار باید بکنم؟
آیا اصلا شدنی این کار؟ :گریه:

poorman
جمعه 01 اسفند 1393, 14:18 عصر
سلام به استاد گرامی این تاپیک

یه برنامه توی بازار گذاشتم که البته با بانک sql از پیش آماده کار میکنه و در ابتدا هیچی توش نیست و کاربر اطلاعات توش ایجاد میکنه(همون قرعه کشی فامیلی) . اما متاسفانه یه کمبودی داره برنامه ام و حالا باید در ورژن بعدی به اون بانک اطلاعاتی یک فیلد جدید اضافه کنم. اگه بانک فقط خواندنی بود میدونم که باید ورژن رو یکی بالا میبردم. اما حالا که هم خاندنی است هم نوشتنی و چون نمیخام اطلاعات احتمالی کاربر پاک بشه ، چکار باید بکنم؟
آیا اصلا شدنی این کار؟ :گریه:

سلام آقای کوچگانی عزیز

برای آپدیت دیتابیس به صورتی که اطلاعات قبلی تون از بین نره بعله راهکار هست، اصلا یکی از قابلیت های همین لایبری SQLiteAssetHelper همینه
برای اینکار شما باید یه اسکریپت بنویسی و اطلاعاتی که میخوای جا به جا بشه رو مشخص کنی و تغییرات لازم رو بدی

منتهی من چون هنوز نیازی به این مسئله نداشتم اطلاع دقیقی از جزئیات کار ندارم که بتونم راهنمایی تون کنم، نمونه برنامش توی gitHub همون صفحه لایبری هست

alireza142
جمعه 01 اسفند 1393, 14:48 عصر
ممنون. ان شاالله که هر چی زودتر به این مسئله هم نیاز پیدا کنین...:لبخند:

متاسفانه من از sqlite asset helper استفاده نکردم و از همون SQLiteOpenHelper در پروژه ام ستفاده کرده ام...:ناراحت:

alireza142
جمعه 01 اسفند 1393, 15:19 عصر
آقا یه راه برای حل مشکلم به ذهنم رسید . اما قبلش نیازه که اینو بدونم که آیا میشه با کد نویسی و بعد از اینکه دیتابیس آماده در گوشی کاربر قرار داده شد ، در یک اکتیویتی بشه با ساخت یک کوئری یک ستون با نام مشخص به همون بانک sql اضافه کرد . این کارشدنیه آیا ... ؟؟؟
اگه شدنیه ممنون میشم راهنمایی کنید poorman عزیز...

alireza142
جمعه 01 اسفند 1393, 16:09 عصر
یافتم یافتم ..!!
بچه ها من مشکلم رو یه جوری حل کردم. اینجا هم میگم شاید به درد کسی بخوره.

البته با کسب اجازه از آقا poorman عزیز

در نسخه جدید برنامه ، همون بانک sql قبلی ( که البته در برنامه من کاملا خالیه و فقط سرفیلد ها رو شامل میشه) قرار دادم. بعد در یک اکتیویتی معیین ، کد زیر رو از کلاس Helper فراخوانی کردم تا در بانک من یک ستون جدید خالی با عنوان NEW ایجاد کند :





public void insertNewField() {
mydb.execSQL("ALTER TABLE " + tableName + " ADD NEW INTEGER");
}



tableName همون نام جدول است.
NEW نام ستون جدید است.
INTEGER هم نوع فرمت ستون جدید است.

البته این کار رو با SharedPreferences کنترل میکنیم که فقط یه بار انجام بشه.

امیدوارم مفید واقع بشه.

kavakeb
پنج شنبه 20 فروردین 1394, 16:00 عصر
من یه برنامه نوشتم که یه اسم و شماره رو در دیتا بیس دخیره بکنه وسپس از روی دیتا بیس بخونه و.در تکست ویو نشون بده
ولی اصلا کارنمیکنه نمیدونم چرا:ناراحت:

لطفا کمکم کنید.
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity {



SQLiteDatabase database;

private static String DBNAME="DB";
private static String TABLE="member";


private TextView name1;
private TextView num1;
String NAME;
String NUM;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);




database=openOrCreateDatabase(DBNAME,Context.MODE_ PRIVATE,null);
database.execSQL("CREATE TABLE IF NOT EXISTS"+TABLE+"(ID INTEGER PRIMARY KEY,name TEXT,num INTEGER);");



database.execSQL("INSERT INTO"+TABLE+"(name,num) VALUES('ali','0000000')");

Cursor allrows =database.rawQuery("SELECT * FROM"+TABLE,null);
NAME=allrows.getString(1);
NUM=allrows.getString(2);
name1=(TextView) findViewById(R.id.nametxt);
num1=(TextView) findViewById(R.id.phonetxtview);
name1.setText(NAME+"");
num1.setText(NUM+"");
allrows.close();
database.close();

poorman
پنج شنبه 20 فروردین 1394, 17:17 عصر
سلام

دوست عزیز دو تا مشکل توی کدتون هست

یکی اینکه نوع num رو از جنس text بذارید چون توی insert کردن دارید به صورت text وارد میکنید

دوم اینکه وقتی میخواین از cursor بخونید باید قبلش بهش بگید که بره سطر اول

allRows.moveToFirst();

چیز دیگه ای به چشمم نخورد

kavakeb
پنج شنبه 20 فروردین 1394, 20:42 عصر
سلام

دوست عزیز دو تا مشکل توی کدتون هست

یکی اینکه نوع num رو از جنس text بذارید چون توی insert کردن دارید به صورت text وارد میکنید

دوم اینکه وقتی میخواین از cursor بخونید باید قبلش بهش بگید که بره سطر اول

allRows.moveToFirst();

چیز دیگه ای به چشمم نخورد


ممنون از راهنماییتون.ولی یه مشکل دیگه
هست متاسفانه
وقتی num رو از جنس text گذاشتم روی خطnum=allrows.getString(2;)خطا میگیره:ناراحت:

poorman
جمعه 21 فروردین 1394, 09:10 صبح
خطا فکر میکنم به دلیل این باشه که جدول قبلی تون پاک نشده و به همین خاطر جدول جدید ایجاد نمیشه

برای این کار ابتدا برنامه رو از روی شبیه ساز clear data کنید یا اینکه پاکش کنید و دوباره ران کنید، یا با یک کوئری جدول رو drop کنید (جدول پاک میشه)

خلاصه اول جدول قبلی باید پاک بشه تا جدول جدید با نوع num تکست بتونه ساخته بشه

چیز دیگه ای به نظرم نمیرسه که دلیل این مشکلتون باشه

zahra.mf
دوشنبه 24 فروردین 1394, 10:33 صبح
سلام
خیلی اموزش خوبیه ولی مثلا برای کسی مثل من که صفره نیاز داره اول با محیط ssqllight اشنا بشه
الان من میخوام بدونم چجوری میشه تو sql فایل متنی یا عکس ذخیره کنم و بعد اون و توی برنامه نمایش بدم و مثلا بخوام خط به خط تغییر بدم چجوریه:ناراحت:
فرض کنید یه متن خیلی بلندیه!

poorman
دوشنبه 24 فروردین 1394, 21:26 عصر
سلام
خیلی اموزش خوبیه ولی مثلا برای کسی مثل من که صفره نیاز داره اول با محیط ssqllight اشنا بشه
الان من میخوام بدونم چجوری میشه تو sql فایل متنی یا عکس ذخیره کنم و بعد اون و توی برنامه نمایش بدم و مثلا بخوام خط به خط تغییر بدم چجوریه:ناراحت:
فرض کنید یه متن خیلی بلندیه!

سلام

بنده متوجه نشدم دقیقا سوال شما چیه!!!

برای ذخیره فایل متنی هیچ تفاوتی نداره با ذخیره اسم... فرض کنید یک کتاب دارید، یک جدول براش بسازید با ستون های شماره صفحه و متن صفحه
متن همون صفحه رو کپی کنید توی هر سطر ( مسلما باید توی این حالت از دیتابیس آماده استفاده کنید )

برای ذخیره عکس میتونید آیدی عکس رو توی دیتابیس ذخیره کنید و بعد اون رو بخونید ازش
ذخیره خود عکس به صورت باینری رو دقیق یادم نیست آموزشش رو گذاشتم توی تاپیک یا نه!!!

در کل توی این تاپیک من مقدمه ای بر دیتابیس گفتم، بقیه کارها به عهده خودتون هست که طبق نیازتون از دیتابیس استفاده کنید

موفق باشید

sourceweb
سه شنبه 25 فروردین 1394, 13:57 عصر
سلام خسته نباشید
چه مشکلی داره این کد؟همین که اجراش میکنم رو اندروید ارور میده بسته میشه
:
package com.example.newdb;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;


public class Main extends Activity {

public static final String DBNAME = "newdata";
public static final String TBL = "second";
private EditText main_insert;
private Button main_btn;

private SQLiteDatabase Handler;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
main_insert = (EditText) findViewById(R.id.main_insert);
main_btn = (Button) findViewById(R.id.main_btn);

Handler = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE, null);

Handler.execSQL("CREATE TABLE IF NOT EXISTS "+TBL+" (id INTEGER PRIMARY KEY AUTO_INCREMENT,value TEXT);");
Handler.close();
main_btn.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {
Handler = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);

String value = main_insert.getText().toString();
Handler.execSQL("insert into "+TBL+"(id,value)values(null,'"+value+"');");
Handler.close();
Toast.makeText(getApplicationContext(), "Success",Toast.LENGTH_LONG).show();
}
});
}



}

poorman
سه شنبه 25 فروردین 1394, 23:21 عصر
سلام

دوست عزیز فکر میکنم خطا وقتی رخ میده که روی دکمه کلیک میکنید، درسته؟

به این خاطر هست که id رو دارید null میذارید
وقتی آیدی primary key هست خودش اتومات مقداردهی میشه و یکی یکی میره بالا، کلا نباید مقدار بدین بهش

Handler.execSQL("insert into "+TBL+"(value)values('"+value+"');");

sourceweb
سه شنبه 25 فروردین 1394, 23:27 عصر
نه همین که برنامه رو اجرا میکنم بسته میشه

sourceweb
سه شنبه 25 فروردین 1394, 23:37 عصر
فکر میکنم با execSql مشکل داره چون
Handler.execSQL("CREATE TABLE IF NOT EXISTS "+TBL+" (id INTEGER PRIMARY KEY AUTO_INCREMENT,value TEXT);");

رو که پاک میکنم اجرا میشه باز رو افزودن کلیک میکنم ارور میده بسته میشه چون توی اون Onclick افزودن هم این دستور استفاده شده

poorman
چهارشنبه 26 فروردین 1394, 15:41 عصر
فکر میکنم با execSql مشکل داره چون
Handler.execSQL("CREATE TABLE IF NOT EXISTS "+TBL+" (id INTEGER PRIMARY KEY AUTO_INCREMENT,value TEXT);");

رو که پاک میکنم اجرا میشه باز رو افزودن کلیک میکنم ارور میده بسته میشه چون توی اون Onclick افزودن هم این دستور استفاده شده

قسمت auto increment رو پاک کنید ببینید درست میشه

Handler.execSQL("CREATE TABLE IF NOT EXISTS "+TBL+" (id INTEGER PRIMARY KEY, value TEXT);");

درصورتی که درست نشد خطایی که توی log cat میاد رو کپی کنید تا بتونم بفهمم داره به چی گیر میده

sourceweb
پنج شنبه 27 فروردین 1394, 08:18 صبح
مشکلش حل شد
---------------------
تاپیک یا آموزشی موجود نیست مبنی بر کار با فایل ها در اندروید؟

rainbow17
یک شنبه 06 اردیبهشت 1394, 10:10 صبح
ا سلام خدمت دوستان خوبم...
من میخوام نرم افزارم شامل یه لیست اصلی باشه که هر آیتم از لیست یه عکس مربوطه رو لود کنه...
توی دیتابیسم یه فیلد به نام picture ساختم که اسم مربوط به هر لیست رو بهش دادم،حالا مطالب و عکس های لیست اصلی درست کار میکنه ولی یکی از آیتم ها که باز میکنم و لیست زیر شاخه باز میشه، مطالب درست کار میکنه ولی عکس منوی دوم با منوی اول یکی و همون عکس ها رو بارگیری میکنه...
لطفا کمک کنین چی کار کنم...
عکسها رو تو کروم پوشه بریزم؟
پیشاپیش ممنون

rainbow17
دوشنبه 07 اردیبهشت 1394, 10:36 صبح
سلام دوباره...
ممنون میشن جواب بدین جناب poor man عزیز:تشویق:

poorman
دوشنبه 07 اردیبهشت 1394, 12:46 عصر
با سلام

دوست عزیز لطفا در این تاپیک فقط و فقط سوالاتی که مستقیما با دیتابیس ارتباط دارند رو مطرح کنید.

برای سایر سوالات خودتون ابتدا به خوبی جستجو کنید، در صورت پیدا نکردن جوابتون تاپیک بزنید.

متشکرم

kavakeb
جمعه 11 اردیبهشت 1394, 15:15 عصر
بابت آموزش خوبتون واقعا ممنون
با روشی که شما آموزش دادید من دیتا بیس رو ساختم اطلاعات رو واردش کردم و تویtoastهم نمایش دادم
ولی من یه مشکلی دارم اون هم نمایش اطلاعات از دیتابیس در لیست ویو هست.اگه ممکنه یه راهنمایی بکنید.
لینک تاپیکمhttp://barnamenevis.org/showthread.php?493864-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-%D9%84%DB%8C%D8%B3%D8%AA-%D9%88%DB%8C%D9%88&p=2207750#post2207750

jfareba
جمعه 18 اردیبهشت 1394, 01:35 صبح
سلام من همه اینکارهارو انجام میدم برنامه اجرا میشه ارور نمیده ولی هرچی میگردم پوشه دیتابیسم رو پیدا نمیکنم

من از یه روش دیگه هم امتحان کردم ولی پوشه دیتابیسم نیست حافظه داخلی وخارجی رو میگردم پیداش نمیکنم اینم کد روش قبلیم

public final String path="data/data/com.example.s06_project01/databases/";
public final String Name="database";
public SQLiteDatabase mydb;

private final Context mycontext;


public database(Context context) {
super(context, "database", null, 1);
mycontext=context;

}


@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub

}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub

}


public void useable(){

boolean checkdb=checkdb();

if(checkdb){

}else{

this.getReadableDatabase();

try{
copydatabase();
}catch(IOException e){
}

}



}

public void open(){

mydb=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READWRITE);

}

public void close(){
mydb.close();
}

public boolean checkdb(){

SQLiteDatabase db=null;
try{
db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch(SQLException e)
{

}
//mydb.close();
return db !=null ? true:false ;

}

public void copydatabase() throws IOException{
OutputStream myOutput = new FileOutputStream(path+Name);
byte[] buffer = new byte[1024];
int length;
InputStream myInput = mycontext.getAssets().open(Name);
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
ممنون میشم کمکم کنید

zahra.mf
جمعه 18 اردیبهشت 1394, 12:14 عصر
سلام این خطا میدونید برای چیه؟

131004

mza1992
جمعه 25 اردیبهشت 1394, 21:41 عصر
سلام دوستانمن میخوام یک پروژه اندروید(بانک پیامک)درست کنم
مشکل اینکه چطور میتونم اطلاعاتی رو در بانک بریزم و این اطلاعات را در یک listview نمایش بدم.خواشا اگ برنامه اماده دارین بهم نشون بدین.ممنون میشم...

shahang
شنبه 16 خرداد 1394, 12:21 عصر
با سلام خدمت دوست عزیز ، ممنون از آموزشی که قرار دادین .
چندتا سوال داشتم و قبل از پرسیدن سوالات عرض کنم خدمتتون که بسیار مبتدی هستم .
فرمت sql من sqlite. هستش و من برای تبدیلش به db. از پشتیبانگیری استفاده کردم ، اشکالی ایجاد نمیشه؟؟
سوال بعدی اینکه دیتابیس من 10 تیبل داره که تو برنامه براش 10 تا دکمه تعریف کردم تا برای دکمه یه قسمت از دیتابیس رو نمایش بده ، برای اجرای تک تک تیبل ها باید چه کار کنم؟؟
برای وصل شدن به دیتابیس لازم هستش حتما از لیست ویو یا گرید ویو استفاده کرد؟؟

poorman
شنبه 16 خرداد 1394, 12:37 عصر
با سلام خدمت دوست عزیز ، ممنون از آموزشی که قرار دادین .
چندتا سوال داشتم و قبل از پرسیدن سوالات عرض کنم خدمتتون که بسیار مبتدی هستم .
فرمت sql من sqlite. هستش و من برای تبدیلش به db. از پشتیبانگیری استفاده کردم ، اشکالی ایجاد نمیشه؟؟
سوال بعدی اینکه دیتابیس من 10 تیبل داره که تو برنامه براش 10 تا دکمه تعریف کردم تا برای دکمه یه قسمت از دیتابیس رو نمایش بده ، برای اجرای تک تک تیبل ها باید چه کار کنم؟؟
برای وصل شدن به دیتابیس لازم هستش حتما از لیست ویو یا گرید ویو استفاده کرد؟؟

سلام

اگر از نرم افزاری که معرفی کردم استفاده کنید مشکلی با فرمت نخواهید داشت. فرمت هم بحث مهمی نیست، خودتون دستی به db تغییرش بدید

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

از اونجایی که میگین تازه شروع کردید، پیشنهادم اینه که با مثال های ساده کار رو شروع کنید

shahang
شنبه 16 خرداد 1394, 13:16 عصر
سلام

اگر از نرم افزاری که معرفی کردم استفاده کنید مشکلی با فرمت نخواهید داشت. فرمت هم بحث مهمی نیست، خودتون دستی به db تغییرش بدید

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

از اونجایی که میگین تازه شروع کردید، پیشنهادم اینه که با مثال های ساده کار رو شروع کنید

ممنون از پاسخ سریعتون ...
چجوری باید این کارو کنم؟؟
برای هر دکمه به صورت تک تک فایل class , xml باید بسازم ؟؟ البته این کارو کردم .
چه کدی رو باید وارد کنم تو قسمت کلاس تا از دیتا بیس بخونه؟؟
کلاس دیتا بیس هم که اول آموزش فرمودین ساختم .
بازم عذر خواهی میکنم سطح سوالاتم پایین هستش .

Mohadi
یک شنبه 07 تیر 1394, 11:07 صبح
کار با خود DbHelper هم خیلی ساده هست.
بذارید یک توضیح مختصری بدم اگر سوالی داشتید بپرسید.

توی یک فایل جاوای جداگانه یک کلاس با اسم دلخواه میسازیم (که معمولا اسمش رو DbHelper میذارن و از کلاس SQLiteOpenHelper ارث میبره) ابتدا یک سری مقادیر دیتابیسمون مثل نام دیتابیس , ورژنش و نام جدول و ستون هاش رو تعریف میکنیم.

مثلا :


public class DbHelper extends SQLiteOpenHelper
{
public static final String DB_NAME = "test.db";
public static final String DB_VERSION = 1;
publiuc static final String T1 = "T1";


یک تابع سازنده هم برای DbHelper میسازیم که نشون میده اسم دیتابیس و ورژنش رو استفاده میکنه.



public void DbHelper(Context con)
{
super(con, DB_NAME, null , DB_VERSION);
}


حالا تابع onCreate() این کلاس رو فراخوانی میکنیم و ابتدا یک استرینگ میسازیم و مقدارش رو با تابع String.Format() شکل کلی جدولمون رو در پارامتر اول و مقادری هر کدوم از متغیر هارو توی پارامتر های بعدی میذاریم و درنهایت این رشته ساخته شده رو با استفاده از یک آبجکت از کلاس SQLiteDatabase به تابع excuSQL برای اجرا میفرستیم.

به فرض جدولی با اسم T1 داریم که بجز کلید اصلی id اش دو ستون NAME و Age رو داره (که این دو ستون رو توی همون قبل فرخوانی oncreate مثل نام دیتابیس و ورژنش و نام جدول تعریف کردیم.)
همون طور که در کد زیر میبینید در پارامتر اول که مربوط به شکل کلی جدول هست هرجا مقدار داریم نوعش و بعد %s میگذاریم و در پارامتر های بعدی به ترتیب بجای هرکدام از %s ها پارامتر وارد شده قرار میگیرد.



public void onCreate(SQLiteDatebase db)
{
String str = String.format("create tabel %s (%s int primary key, %s text , %s text" ,
T1,
NAME,
AGE);

md.excuSQL(str);


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

به فرض یک دکمه ای داریم که اگر اون رو زدیم میخوایم دو مقداری که در دو تا ادیت تکست که کاربر داخلش وارد کرده ارو بگیره و به ترتیب داخل یک سطر از جدول T1 داخل ستون های NAME و AGE اش بریزه و یک آی دی اختصاصی هم بهشون میده.
داخل onCreate کلاس مورد نظر یک آبجکت از کلاس DbHelper و یک آبجکت از کلاس SQLiteDatebase میسازیم و نوع آبجکت دیتابیس DbHelper رو رایتبل میکنیم که بنویسه داخل جدول.
(دیگه کد اینارو نمینویسم چون واضحه اما خواستید بگید راهنماییتون کنم باز.)

بعدش setOnClickListener میکنیم برای دکمه امون که دیگه اینجا نمینویسم داخل اورواید آنکلیک اش ابتدا یک مقدار ContentValue باید تعریف کنیم که در ادامه مقدایر گرفته شده از ادیت تکستهامون رو داخل او بریزیم و در نهایت اون کانتنت ولیو رو بریزیم داخل جدول دیتابیسمون.



ContentValue v = new ContentValue();
v.put(Name, edtText1.getText.toString());
v.put(Age, edtText2.getText.toString());


حالا اون آبجکت SQLiteDatabase که ساخته بودیم و بالا گفتم رو ازش برای insert کردن داخل جدول دیتابیست استفاده میکنیم.

چون میخوام کدش رو بنویسم فرض میکنیم اسم این آبجکت رو گذاشته بودیم db


db.insert(T1 , null , v);

ali.sk
سه شنبه 09 تیر 1394, 00:55 صبح
سلام
من تازه یک گوشی lg g2 d800 خریدم که در اشتراک گذاری اینترنت مشکل داره و فعال تمیشه و نتونستم آموزشی برای درست کردن این مشکل پیدا کنم. اما با کلی جست و جو در سایت های خارجی آموزش حل این مشکل رو پیدا کردم که با نرم افزار sqlite editor مقدار فایل tether رو در بخش settinge.db رو باید -1 کنم اما وقتی که وارد settinge.db می شوم خطا میده که این دیتابیس قفل هست.
ممنون میشم که من را راهنمایی کنید که چطور قفل این دیتا بیس رو باز کنم.
در ضمن گوشی روت شده مشکل از روت شدن گوشی نیست.
با تشکر

morahimi
سه شنبه 16 تیر 1394, 01:13 صبح
سلام میشه کد کامل کلاس دیتابیس رو بزارید آخه من نمی فهمم که مثلا کلاس باید از چی ارث بری کنه

morahimi
سه شنبه 16 تیر 1394, 01:49 صبح
حالا میخوایم اطلاعات رو از جدول بخونیم
برای این کار از یک شیء Cursor استفاده میکنیم که اطلاعات جدول رو داخل خودش نگه میداره
ابتدا باید قسمت های مورد نیاز از جدول رو داخل Cursor بریزیم

mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE, null);

ما تو این کد با * تمام ستون های جدول رو به ترتیب داخل cursor ریختیم
در صورت نیاز میتونید فقط چند ستون رو انتخاب کنید تا کارتون راحت تر باشه
و میتونید ردیف هایی رو انتخاب کنید که یک شرط خاص رو داشته باشند ( مثلا دانشجویان با معدل بالای 16 )
اینا رو اگر نمیدونید یا برید دنبالش بگردید ، یا بپرسید براتون مثال بزنم ، چون به SQL ربط داره نه اندروید


خوب چطری باید این کارو کرد؟

morahimi
سه شنبه 16 تیر 1394, 05:03 صبح
من میخوام یه جا دیتابیس رو آپدیت کنم ولی نمیدونم چطور اونو معرفی کنم؟
با این کد ارور میده final SQLiteDatabase db = openOrCreateDatabase(Database, Context.MODE_PRIVATE,null);

code-academy.ir
یک شنبه 21 تیر 1394, 15:41 عصر
سلام

توی این پست ابتدا ساخت دستی دیتابیس و سپس کار با دیتابیس رو یاد میگیرید

درصورتی که میخواین با دیتابیس آماده کار کنین این پست (http://barnamenevis.org/showthread.php?441406-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-SQLite-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%DA%A9%D9%84%D8%A7%D8%B3-DataBaseHelper&p=1987677&viewfull=1#post1987677) رو مشاهده کنین

-----------------------------------------------------------------------------------------------------------------------

واقعیت اینه که من از همون اول نتونستم با پیچیدگی کلاس 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 رو توی این پست (http://barnamenevis.org/showthread.php?441406-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-SQLite-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%DA%A9%D9%84%D8%A7%D8%B3-DataBaseHelper&p=1987835&viewfull=1#post1987835) میتونید مشاهده کنید

-------------------------------------------------------------------------------------------------------------------

خواندن اطلاعات از دیتابیس

حالا میخوایم اطلاعات رو از جدول بخونیم
برای این کار از یک شیء 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 هم باید حتما اون رو مثل دیتابیس بندید

اطلاعاتی رو که داخل آرایه ریختین میتونید به آداپتر لیست ویو یا گرید ویو بفرستید و در اونجا نمایش بدین

خب تبریک میگم شما یاد گرفتید خیلی ساده اطلاعات رو در دیتابیس ذخیره کنید و از دیتابیس بخونید
اگر نیاز به توضیح بود در خدمتم
دکمه تشکر هم که اون پایین هست دیگه :لبخند:



برای کار با دیتایبس در اندروید، می تونین از ویدئوی اموزشی رایگان در لینک زیر استفاده کنید

لینک آموزش کار با دیتابیس در اندروید (http://www.code-academy.ir/SQLite-Database-in-Android.aspx)



کد آکادمي
آموزش برنامه نويسي اندرويد با جاوا و سي شارپ

code-academy.ir

mohammada12
جمعه 02 مرداد 1394, 15:58 عصر
درود
من کد اول یعنی متصل شدن بوسیله ساخت دیتا بیس داخلی رو انجام دادم و توی امیلتور خود sdk جواب گرفتم
ولی وقتی برنامه رو از امیلتور YouWave اجرا یا از پوشه bin کپی و ارسال می کنم به گوشی خودم که اندروید 4.1 هست اون اکتیویتی که دیتا بیس داره جواب نمی ده و بیرون میاد به نظرتون مشکل از کجاست
مرسی.

mohajer68
چهارشنبه 14 مرداد 1394, 17:50 عصر
چطور میشه از این کلاس تو android studio استفاده کرد

mohamad73
سه شنبه 20 مرداد 1394, 12:18 عصر
سلام من تو یه برنامه کتاب از دیتابیس و کتابخانه sqlite assets helper استفاده کردم
همه کاراشم با کمک پست خوب شما انجام دادم ولی برای جستجو به مشکل برخوردم
من قصد داشتم وقتی کاربر یه کلمه ای رو سرچ میکنه هم در فیلد عنوان و هم در فیلد متن اصلی سرچ بشه
و در لیست ویو نمایش داده بشه
اما وقتی کوئریش رو مینویسم
جواب نمیده
SELECT * FROM omomi WHERE _title LIKE "'txt'"
یا
SELECT * FROM omomi WHERE _title LIKE%txt%
نمیدونم باید چیکار کنم ؟

saeed_g21
سه شنبه 20 مرداد 1394, 13:53 عصر
سلام من تو یه برنامه کتاب از دیتابیس و کتابخانه sqlite assets helper استفاده کردم
همه کاراشم با کمک پست خوب شما انجام دادم ولی برای جستجو به مشکل برخوردم
من قصد داشتم وقتی کاربر یه کلمه ای رو سرچ میکنه هم در فیلد عنوان و هم در فیلد متن اصلی سرچ بشه
و در لیست ویو نمایش داده بشه
اما وقتی کوئریش رو مینویسم
جواب نمیده
SELECT * FROM omomi WHERE _title LIKE "'txt'"
یا
SELECT * FROM omomi WHERE _title LIKE%txt%
نمیدونم باید چیکار کنم ؟

Query خود را بصورت زیر تعریف نمایید

SELECT * FROM omomi WHERE _title LIKE '%"+txt+"%'

mohammadi.maryland
جمعه 27 شهریور 1394, 00:51 صبح
سلام دوستان-فیلم کار با دیتابیس رو دیدم ولی مشکلی که دارم و هنوز برطرف نشده چطور میتونم توی دیتابیس یک فایل متنی که عکس هم لابلای اموزشاش هست جوری بذارم که عکساش نمایش داده بشه؟ من هم اسم متن رو با فرمت png گذاشتم توی فایل apk عکس رو نشون نداد -یکبار هم متن با عکس رو کپی کردم توی دیتابیس باز هم عکسا رو نشون نداد-چیکار کنم که عکسهایی که لابلای متون هست نمایش بده؟ و اینکه چطور یک فایل پی دی اف رو با همون فرمت پی دی اف وارد دیتابیس کنم؟ اگر سولام مقدماتی بود ببخشید چون تازه با این مورد اشنا شدم-متشکرم

ariofarhadi
شنبه 04 مهر 1394, 11:27 صبح
سلام
من یه دیتابیس درست کردم گذاشتمش تویه پوشه assets وقتی تعداد مطالب تویه دیتابیسم کمه خیلی راحت اپلیکیشن اجرا میشه ولی وقتی تعداد مطالب دیتابیسم زیاد میشه نرم افزار فورس کلوز میشه،راه حلی به ذهنتون میرسه؟
تا اونجایی که من تو اینترنت سرچ کردم انگار دلیلش اینه که حجم دیتابیس موجود در پوشه assets اگر بیشتر از 1mb باشه این اتفاق میافته
لطفا راهنماییم کنین
ممنون

mojtaba5
شنبه 04 مهر 1394, 22:05 عصر
سلام
آیا پی دی اف آموزش هم در صفحات هست؟
اگه هست بگید کدوم صفحه، چون آموزشها در صفحه اول بهم ریخته هست و منسجم نیست.

saeedsfm
پنج شنبه 21 آبان 1394, 12:50 عصر
سلام دوستان من یک دیتابیس sqlite لوکال دارم با پسوند db تو پوشه asset ذخیره شده اگه بخوام این دیتابیس به طور کلی از سرور آپدیت بشه باید چیکار کنم یعنی کل دیتابیس از سرور دانلود بشه و جایگزین دیتابیس قدیمی بشه تو برنامه!

saeidpsl
پنج شنبه 21 آبان 1394, 13:01 عصر
سلام دوستان من یک دیتابیس sqlite لوکال دارم با پسوند db تو پوشه asset ذخیره شده اگه بخوام این دیتابیس به طور کلی از سرور آپدیت بشه باید چیکار کنم یعنی کل دیتابیس از سرور دانلود بشه و جایگزین دیتابیس قدیمی بشه تو برنامه!
اینو (http://stackoverflow.com/questions/7162194/how-to-download-an-sqlite-database-from-an-android-device) ببین ......

saeedsfm
پنج شنبه 21 آبان 1394, 17:58 عصر
اینو (http://stackoverflow.com/questions/7162194/how-to-download-an-sqlite-database-from-an-android-device) ببین ......
میشه خودتون بیشتر توضیح بدید کدهای همین قسمت رو!

kingsezar
پنج شنبه 05 آذر 1394, 22:11 عصر
سلام . چظور میشه از دیتابیس در android studio استفاده کرد؟؟

rezano
جمعه 27 آذر 1394, 18:56 عصر
با سلام
چطور میتونم یه آرایه از بایت ها رو توی دیتابیس ذخیره کنم؟
نوع ستون رو توی دیتابیس برابر BLOB قرار دادم و از این کد استفاده کردم:

mydb.execSQL("Update " + _tableName + " Set " + _columnName + " = " + _byteArray + " Where ID = " + _id);


ولی ظاهرا توی کد بالا مقدار byteArray_ رو به String تبدیل می کنه. (البته این کد برای مقادیر دیکه مثل String و int و ... به درستی کار میکنه.)

توی اینترنت که سرچ کردم راه حل استفده ار PreparedStatement بود. مثل کد زیر:


String sqlQuery = "INSERT INTO testtable(stringcolumn, blobcolumn) VALUES(?,?)";
String testString = "hello world";
byte[] testBytes = "this is a test".getBytes();
int rowsaffected = 0;

PreparedStatement statement = connection.prepareStatement(sqlQuery);

statement.setString(1,testString);
statement.setBinaryStream(2,new ByteArrayInputStream(testBytes),testBytes.length);
rowsaffected = statement.executeUpdate();


ولی توی کد بالا از connection ی که قبلا ساخته شده استفاده کرده.
وقتی از SQLiteAssetHelper استفاده میکنیم چطوری میشه این قضیه پیاده سازی میشه؟

با تشکر از وقتی که می زارید :قلب:

CRbreeze
شنبه 12 دی 1394, 16:27 عصر
سلام خسته نباشید

من یه سوال راجع به متصل کردن SQlite به اندروید استودیو دارم...اگه کمکم کنید ممنون میشم

کدها بصورت زیر هست و زمانیکه دکمه کلیک میشه به تابع namayesh() که میرسه از برنامه خارج میشه....
من خودم فک میکنم که نمیتونه از دیتابیس خارجی بخونه ولی نمیدونم باید چکار کنم...
main:
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_app);
db= new Database(this);
db.usable();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

db.open();
String str=db.namayesh(0,1,"contents");
Toast.makeText( BookApp.this,str,Toast.LENGTH_SHORT).show();
db.close();
}
});


}

کلاسDatabase

public class Database extends SQLiteOpenHelper {

public final String path="data/data/com.example.pc1.book/data";
public final String Name="database";
public SQLiteDatabase mydb;
public final Context mycontext;


public Database(Context context) {
super(context,"databases",null,1);
mycontext = context;
}


public void usable(){
if(checkdb()){


}else{
this.getReadableDatabase();
try{
copydatabase();
}catch(IOException e){


}
}
}


public void open(){
mydb= openDatabase(path + Name, null, OPEN_READWRITE);




// mydb=openOrCreateDatabase(path+Name, null, null);
// mydb.execSQL("CREATE TABLE IF NOT EXISTS "+TB_USERS +" (ID INTEGER PRIMARY KEY, NAME TEXT, CITY TEXT);");
}
@Override
public void close(){
mydb.close();
}


public boolean checkdb(){
SQLiteDatabase db = null;
try{
db= openDatabase(path + Name, null, OPEN_READONLY);
}catch(Exception e){


}
return db != null ? true : false;
}


public void copydatabase() throws IOException{
OutputStream myOutput= new FileOutputStream("/data/data/com.example.pc1.book/databases/mydb.sqlite");
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while((lenght=myInput.read(buffer))>0){
myOutput.write(buffer,0,lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}




public String namayesh(int row,int field,String table){


Cursor allrows = mydb.rawQuery("select * from " + table,null);
allrows.moveToPosition(row);
return allrows.getString(field);
}

rezano
شنبه 12 دی 1394, 23:53 عصر
سلا م CRbreeze@ عزیز؛

1. یه تاپیک جدید بزن و مشکلت رو اونجا مطرح کن اینجا مربوط به کار با SQLite با استفاده از کلاس SQLiteAssetHelper هستش.
2. لوگ کت رو بزار که ببینیم چه خطایی میده.

CRbreeze
شنبه 12 دی 1394, 23:59 عصر
آخه من گفتم یه تاپیک جدید نزنم شاید مشکل ساز بشه

الان درست میکنم...

shabgardetanha
یک شنبه 13 دی 1394, 11:00 صبح
سلام من تازه اندروید رو شروع کردم الان میخوام با بانک کار کنم تمام پست ها رو خوندم و اجرا کردم اما توی پوشه lib فایل جاوا رو که کپی کردم روش یک علامت قرمز و روی پوشه برنامه هم ضربدر قرمز میاد موقع اجرا هم اصلا هیچ تغییری درyouwave نمیاد انگار نه انگار که اجرا رو زدم من بانکم رو با sqlite expert ایجاد کردم با پسوند db بود توی پوشه asset هم database ساختم و کپی کردم کسی ميدونه باید چکار کنم eclips م 3.4 و sqlite4
ممنون

shabgardetanha
دوشنبه 14 دی 1394, 08:05 صبح
سلام من طبق
http://barnamenevis.org/showthread.php?441406-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-SQLite-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87
برای کار با بانک در اندروید یه بانک sqlite ساختم با نام test.db و توی پوشه asset→databases کپی کردم فایل جار هم در lib
این کدها رو هم نوشتم
mydtabase.java

public class MyDatabase extends SQLiteAssetHelper {

private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 3;
public MyDatabase (Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

}
main.java

public class MainActivity extends ActionBarActivity {

private MyDatabase MyData;
private TextView txt;

private SQLiteDatabase mydb;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MyData = new MyDatabase(this);
mydb = MyData.getReadableDatabase();

/*mydb.execSQL("update user set name='dara' where _id=1");*/
Cursor c=mydb.rawQuery("select * from user",null);
if(c.getCount()==0)
{

mydb.execSQL("update user set name='dara' where _id=1");
}
txt=(TextView) findViewById(R.id.textView2);
txt.setText("ok");
}
}

اما موقع اجرا پیغام unfortunately my app has stoped میدهد ممنون میشم راهنماییم کنید مشکل کارم کجاست؟

shabgardetanha
سه شنبه 15 دی 1394, 07:58 صبح
کسی نیست جواب بده..؟

rezano
چهارشنبه 16 دی 1394, 22:29 عصر
shabgardetanha@ تنها راهنمایی که میشه کرد اینه که بگیم "متاسفانه برنامه شما متوقف شده است"
اینو کلی بهت میگم تا وقتی که لوگ کت رو نزاری کسی حال و حوصله تست و دیباگ برنامه ت رو نداره.
متن لوگ کت (همون خطوط قرمزی که موقع اجرا برنامه توی اندروید استادیو نمایش داده میشه) رو بزار که متوجه بشیم مشکل کجاست.
موفق باشی

hadis_a
پنج شنبه 21 مرداد 1395, 11:18 صبح
[QUOTE=poorman;1987677]آموزش کار با دیتابیس آماده SQLite برای ساخت یک دیتابیس خارجی و آماده نرم افزار SQLite Database Browser (http://sourceforge.net/projects/sqlitebrowser/)رو پیشنهاد میکنم نمونه کار با دیتابیس آماده و نمایش و آپدیت اطلاعات دیتابیس رو از این پست (http://barnamenevis.org/showthread.php?401729-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF&p=2016418&viewfull=1#post2016418)دریافت کنید ----------------------------------------------------------------------------------------------- بالاخره من دیشب تونستم تمام مشکلات مربوط به دیتابیس آماده رو حل کنم و ارتباط خوبی برقرار کنم با لایبری
sqlite asset helper ( با تشکر از hamedjj به خاطر پافشاری روی استفاده از این لایبری ) ولی خب استفاده از این لایبری هم یکم برام گیج کننده بود که خدا رو شکر تونستم آخرش راه بندازمش من یه توضیح میدم واسه کسایی که میخوان با دیتابیس آماده کار کنن و مثل من به مشکل خوردن انصافا استفاده از sqlite asset helper راحته و بسیار کارا یکی از مشکلاتی که من برخورد کردم توی استفاده از کلاس های دیگه، این بود که توی اندروید 10 به پایین دیتابیس رو ایجاد نمیکرد ولی این لایبری مشکل رو حل کرد خب دوستانی که با اکلیپس کار میکنن این فایل jar رو دانلود کنن و توی پروژه مورد نظر در پوشه libs قرار بدن لینک فایل jar (http://s3.picofile.com/file/8203393826/sqliteassethelper_2_0_1.jar.html) توی پوشه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 استفاده کنید من از این کد استفاده کردم ولی متاسفانه دیتابیسم در مسیر data/data/pack_name/database ایجاد نشد میخاستم بدونم مشکل از کجاست تازه یه اروری هم توی logcat دارم ک میگه فولدرتون توی asset فقط readable و وقتی readable هم میزارم بازم ارور میده java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helper.hjuybar/com.helper.hjuybar.A_bank_activity}: com.readystatesoftware.sqliteasset.SQLiteAssetHelp er$SQLiteAssetException: Missing databases/hjuybar.db file (or .zip, .gz archive) in assets, or target folder not writable

AreF.95
یک شنبه 31 مرداد 1395, 23:43 عصر
سلام دوستان

یه پروژه رو کسی برام فرستاده ایراداشو برطرف کردم و از SQLiteAssetHelper هم برای وصل شدن به دیتابیس استفاده کردم مشکلی که الان وجود داره اینه که وقتی با 4.1.1 اجرا میگیرم لیست ویو رو مشاهده میکنم ولی در 5.0.0 خطا میده ...

NeoFighT
سه شنبه 02 شهریور 1395, 07:47 صبح
سلام ، دوستان لطفا دیگه مستقیم با خود SQlite کار نکنید ، یا از ORM استفاده کنید ، مثل Sugar , Sprinkles,.... یا از Realm استفاده کنید ، این Realm تازه اومده و انگار سرعتش خیلی بیشتر از SQlite هستش.

CodeforLife
سه شنبه 02 شهریور 1395, 12:54 عصر
سلام به شما و ممنونم از همه عزیزان .
انشالله خدا از شما راضی باشد :لبخند:
من تازه شروع کردم و نمی دونم این راههایی که فرمودین چی هستن و اینکه آیا از هم جدا اند یا اینکه همه خوبsqllite هستن ...؟؟؟
اینکه من باید از کجا شروع کنم ؟
کدوم راه بهتره ؟
یه توضیح مختصر راجع به همه این آموزش ها به صورت کلی می فرمایید .؟
ممنونم

i love programer
دوشنبه 30 اسفند 1395, 16:04 عصر
سلام دوستان هرکی میتونه کمکم که دوماهه خداشاهده دارم کلنجار میرم این برنامه درست نمیشه هرکی بتونه کمکم کنه بخدا دستشو از اینجا میبوسم دیگه داره مخم سوت میکشه دیگه شک افتاده بهم که اشکال از برنامه نیست اشکال از اندروید استودیو منه.نمیدونم هرکی میتونه کمک کنه فقط .برنامشم اینه که اطلاعات رو از کاربر میگیره ثبت میکنه تو دیتابیس


این از کلاس مدیریت دیتابیس:


package mehrsoft.com.app3;


import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DataBaseManagment extends SQLiteOpenHelper {

public DataBaseManagment(Context context) {
super(context, "DbTest", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
String Q_CreateTable="CREATE TABLE T_Users ( "+
" UserId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+
" Name VARCHAR NOT NULL,"+
" Age INT,"+
" Avg REAL);";
db.execSQL(Q_CreateTable);
db.close();

}


public boolean AddUser(User u)
{
try{
SQLiteDatabase db=this.getWritableDatabase();
String Q1="Insert INTO T_Users(Name,Age,Avg)Values('"+u.Name+"',"+u.Age+","+u.Avg+")";
db.execSQL(Q1);
db.close();
return true;
}
catch(Exception ex)
{
return false;
}
}




public User GetUser(int id)
{
User k=new User();
SQLiteDatabase db=this.getReadableDatabase();
String Q1="Select * From T_Users where UserId="+id;
Cursor C1=db.rawQuery(Q1,null);
if(C1.moveToFirst()==true)
{
k.Id=C1.getInt(0);
k.Name=C1.getString(1);
k.Age=C1.getInt(2);
k.Avg=C1.getDouble(3);
}

return k;
}



@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

i love programer
دوشنبه 30 اسفند 1395, 16:09 عصر
این از کلاس مدل :


package mehrsoft.com.app3;

public class User {
public int Id;
public String Name;
public int Age;
public double Avg;

ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــ

اینم از Main activity:
package mehrsoft.com.app3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
Button btnregister;
Button btnsearch;
EditText edtname;
EditText edtid;
EditText edtage;
EditText edtsearch;
TextView txt1;
DataBaseManagment db;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnregister = (Button) findViewById(R.id.btnregister);
btnsearch = (Button) findViewById(R.id.btnsearch);
edtname = (EditText) findViewById(R.id.edtname);
edtid = (EditText) findViewById(R.id.edtid);
edtage = (EditText) findViewById(R.id.edtage);
edtsearch = (EditText) findViewById(R.id.edtsearch);
txt1 = (TextView) findViewById(R.id.txt1);
btnregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db=new DataBaseManagment(MainActivity.this);
User u=new User();
u.Name=edtname.getText().toString();
u.Age=Integer.parseInt(edtage.getText().toString() );
u.Avg=Double.parseDouble(edtid.getText().toString( ));
boolean f= db.AddUser(u);
if (f==true){
Toast.makeText(MainActivity.this,"sabt shod",Toast.LENGTH_LONG).show();;
}
else {
Toast.makeText(MainActivity.this,"erororor",Toast.LENGTH_LONG).show();;
}

}
});
btnsearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

int id=Integer.parseInt(edtid.getText().toString());
User u=db.GetUser(id);
if (u.Id!=0){
txt1.setText(u.Age+" "+u.Avg+""+u.Name);
}
else {
Toast.makeText(MainActivity.this,"پیدا نشد",Toast.LENGTH_LONG).show();
txt1.setText("");
}
}
});



}
}

i love programer
دوشنبه 30 اسفند 1395, 16:11 عصر
در ضمن بگم هیچ اروری نداره موقع اجرا فقط ثبت نمیکنه اطلاعات رو

melika.irani
دوشنبه 04 اردیبهشت 1396, 02:31 صبح
دیتابیس را باید تو پوشه databases و سپس تو پوشه asset قرار بدی
شما این کار را کردید؟

کسی نیست سوال منو جواب بده؟؟؟

من یه سایت پیدا کردم اموزش کامل Sqlite داره بصورت رایگان . گفتم به اشتراک بزارم شاید برای دوستان مفید باشه
http://mehrtash-souri.com/article/6/2/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-SQLite

hamidchi
چهارشنبه 06 اردیبهشت 1396, 19:53 عصر
سلام
یه برنامه میخام بنویسم که یه دیتابیس داشته باشم و دریافت و پرداخت های چند نفر رو بتونم توش ذخیره کنم
تعداد نفرات ممکته کم یا زیاد بشه
ستون های دیتابیس :
نام فرد - مبلغ دریافتی - مبلغ پرداختی - تاریخ

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

naghshzan
دوشنبه 11 اردیبهشت 1396, 21:12 عصر
من با این کد :
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
mydb.execSQL("INSERT INTO " + TABLE + "(NAME, PLACE) VALUES('یک دو سه','امتحان')");
یه جدول ساختم ولی نمیتونم اطلاعات واردش کنم ......
میشه سایتم (http://neshanteam.ir)را ببینید

opinions
یک شنبه 05 شهریور 1396, 10:46 صبح
دوستان یه سوال! با نرم افزار DB Browser یه دیتابیس ساختم، هیچ مشکلی هم نداره در برنامه. حالا دیتابیس رو از همون DB Browser رمزگذاری کردم، توی برنامه اصلی باید چه کدی بنویسم که رمز رو بهش نشون بدم؟ در واقع چطوری از دیتابیس خارجی رمزدار استفاده کنم؟