حامد جان ببخشید من نبودم
برای این کار شما دیتابیس رو باید از نوع writable بگیرید به جای readable و بقیه کار مشابه قبل هست
یعنی شما با کد mydb.execsql میتونید هر کوئری رو روی دیتابیس اعمال کنی ( چون دیتابیس رو از نوع نوشتنی گرفتید، فقط کارهای نوشتنی )
mydb = MyDataBase.getWritableDatabase();
mydb.execSQL("update table set column = 'yes' where id = 1");
سلام
چند تا احتمال وجود داره، یکی اینکه شما دارید یک عمل اجرایی انجام میدین درحالی که دیتابیستون رو از نوع readable گرفتید، پس اگر میخواین کاری روی دیتابیس اجرا بشه باید writable باشه
احتمال دیگه اینکه شما قبل از مقدار دادن متغیر mydb تون MyDatabase رو مقدار ندادین ( MyDataBase = new MyDatabase(context); )
احتمالات دیگه هم میشه در نظر گرفت ولی باید پیام خطایی که میده رو بذارید، شاید کلا کوئری شما مشکل داره
دوستان چطوری میتونیم اطلاعات رو از دیتابیس بگیریم؟
میشه یه مثال بزارید؟
اگه دیتابیس بسته است باید باز کنید بعد با استفاده از دستور زیر
Cursor cursor= db.rawQuery("select name from db", null);
cursor.moveToFirst();
String txt= cursor.getString(cursor.getColumnIndex("name"));
تو نمونه برنامه ها یه پروژه آموزشی هست که از این لایبری استفاده شده
https://barnamenevis.org/showthread.p...=1#post1977385
میشه کد بزارید؟
------------------------------------------------------------------------
با توضیح زیر مشکل حل شد.
مورد بعدی اینه که شما براتون مهم نیست کاربر اطلاعات قبلیش چی بوده، یا اصلا کاربر با دیتابیس کاری نداشته و چیزی توش وارد نکرده
که برای اینکار کافیه عدد ورژن دیتابیس رو توی کلاس MyDatabase یکی ببرید بالا و توی همون کلاس توی تابع MyDatabase بعد از متد super این کد رو بنویسید
setForcedUpgrade();
اینطوری به صورت خودکار دیتابیس قبلی پاک میشه و دیتابیس جدید جایگزین میشه
------------------------------------------------------------------------
دوستان کسی نمیدونه در این روش چگونه اطلاعات رو به صورت راندوم از دیتابیس بگیریم؟
مثلا من 5 تا داده دارم و میخوام با با کلیک بر روی دکمه یکی از این داده ها توی یک TextView نمایش داده بشه.
آخرین ویرایش به وسیله ali-star : شنبه 13 اردیبهشت 1393 در 06:18 صبح
این رندوم گرفتن اطلاعات دیگه از سمت دیتابیس نیست
شما باید 5 تا داده رو با cursor بگیرید ( select ) کنید و از دستور رندوم استفاده کنید و با تولید یک عدد بین صفر و تعداد رکوردها، اون داده رندوم رو برگردونید
Cursor c = your select query ...
Random r = new Random();
int x = r.nextInt(c.getCount());
c.moveToPosition(x);
textview.setText(c.getString(c.getColumnIndex("nam e")));
سلام. کل کدی که من نوشتم این هست :
private MyDatabase MyData;
private SQLiteDatabase mydb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyData = new MyDatabase(this);
mydb = MyData.getWritableDatabase();
}
ضمن اینکه دیتابیس رو در فولدری assets و در پوشه databases قرار داده ام. با نام test.db.zip
این هم کلاس MyDatabse هست :
public class MyDatabase extends SQLiteAssetHelper{
private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
اما اروری که میده اینه :
unfortunately, mydbs has stopped
ممنونم.
دوست عزیز لطفا log خطا رو بذارید تا بتونم راهنمایی کنم
دوست عزيز نام فايلت test.db.zip هست چطوري ميخواي فايل test.db رو باز کني ؟
نام فايلت رو به test.db تغيير نام بده بعد دوباره تست بزن
سلام دوستان
چطوری میتونیم همزمان از همه تیبل ها اطلاعات رو بگیریم.
مثلا من دیتابیسم 5 تا تیبل داره و میخوام همه اطلاعات او 5 تیبل توی listView نمایش داده بشه؟
اینکه چطوری توی لیست ویو نشون بدیم رو نمیدونم چون من تازه واردم اما همونطوری که استاد عزیز گفتن برای گرفتن اطلاعات از دیتابیس باید از دستورات زیر استفاده کنید :
mydb= MyData.getReadableDatabase();
Cursor cursor= mydb.rawQuery("select * from db", null);
cursor.moveToFirst();
String txt= cursor.getString(cursor.getColumnIndex("name"));
موفق باشید.
باسلام وخسته نباشین
( من مبتدی هستم)از مطلب مفیدتون واقعا متشکرم چون من چندماه است که با این مشکل روبرو هستم وتا حدی مشکل حل شد حالا من در برنامه ام از جستجو استفاده کرده ام به این شکل که صفحه ای را کاربر باز میکند که دارای چند فیلد است با توجه به فیلدهایی که کاربر پر میکند و دیتابیس برنامه باید کار جستجو را اغاز کند وسپس نتیجه کار را به کاربر در صفحه دیگر نمایش دهد حال برای این کار چه طوری باید با این دیتابیس کار کنم؟
شما در هر زمان میتونید اطلاعات یک تیبل رو بخونید، یعنی نمیشه با یک کوئری 5 تا تیبل رو بگیرید
برای کاری که شما میخواین، باید اطلاعات هر تیبل رو یکی یکی بگیرید و توی آرایه یا لیست بریزید و اون رو به لیست آداپتر بفرستید
یعنی یک بار برای تیبل اول کوئری مینویسید و اطلاعاتش رو داخل آرایه میریزید، بعد باز برای هر تیبل این عملیات رو تکرار میکنین
سلام
شما برای جستجو مسلما باید از کوئری select استفاده کنید اما باید براش شرط بذارید
مثلا بگید سطری رو select کن که فیلد اسم اون برابر "حجت" باشه
شرط رو با where مینویسیم
select name,family,tell from Table where name = 'حجت'
این کوئری رو دقیقا مثل کوئری های دیگه استفاده میکنید، هیچ فرقی ندارن
شما ارتباط با دیتابیس رو یاد گرفتین، دیگه از اینجا به بعد همه چیز به SQL برمیگرده، یعنی شما اگه میخواین بهترین عملکرد رو توی دیتابیس داشته باشین، باید دستورات SQL رو یاد بگیرید
باتشکر از جواب شما فقط ببخشید اگر بجای حجت بخواهیم فیلدی که کاربر وارد کرده را قرار بدهیم ارتباطی به دیتابیس نداره (در صورت امکان یک نمونه ارایه دهید)
سلام.
استاد لطفا برای کار با SQLite یک نرم افزار خوب و روان معرفی کنید.
من بصورت دستی فایل ها رو آماده میکردم اما نمیدونم چرا از دیتابیسم داره ایراد میگیره همش.
ممنونم.
افزونه SQLite Manager برای FireFox میتونه بهترین گزینه باشه.
هم افزونه ای که دوستمون معرفی کردن، هم نرم افزار SQLite Database browser کار رو با دیتابیس آسون میکنه
البته وارد کردن اطلاعات به هرحال به صورت دستی هست ( به صورت کوئری یا اینکه از توی جدول ها )، مگر اینکه تبدیل دیتابیس آماده باشه
من فشردش نکرم مستقیم اضافه کردم اون هم با پسوند sqlite کار کرد.
دوستان لطفا منو راهنمایی کنید.
من با استفاده از برنامه SQLite Studio دیتابیس مورد نظرم رو درست کردم.
و خروجی .sql هم گرفتم.
الان برای اینکه بتونم ازش در اندروید استفاده کنم باید چطوری پسوندش رو به .db تغییر بدم ؟
پسوند .sqlite هم نمیدونم چرا اما یه وقتایی کار میکنه یه وفتایی هم اصلا جواب نمیده و برنامه ارور میدهو
ممنونم.
توضیح خیلی واضحه که دیگه !!!
یک بار میگید cursor = mydb.rawQuery("select * from table1"); و اطلاعات رو ازش میخونید و توی آرایه میریزید
بعدش باز دوباره میگید cursor = mydb.rawQuery("select * from table2"); و اطلاعات رو به آرایه اضافه میکنید
و به همین ترتیب برای بقیه تیبل ها ...
شرمنده چون من وقت ندارم یک نمونه کامل بذارم، شما لطف کنید طبق همون اصول کار با دیتابیس که توی پست اول همین تاپیک گفتم کار کنید
شما اگر میخواین با لایبری که آموزشش رو قرار دادم کار کنید باید دیتابیس با پسوند db ذخیره بشه و بعد زیپ بشه
من پیشنهاد میکنم از نرم افزار SQLite Database Browser استفاده کنید، توی این نرم افزار بعد از ساخت به راحتی دیتابیس رو ذخیره میکنید
لازم نیست خروجی بگیرید، فقط ذخیره کنید با پسوند .db
اگر هم فایلتون پسوند نداره خودتون یک .db بهش اضافه کنید
زمانی که در SQLite Database Browser دیتابیس مثلا در درایو c ایجاد کردیم
حالا در برنامه اندروید چطور این مسیر بدیم؟
private static String DBNAME = "PERSONS";
یا زمانی که برنامه در تبلت ریختیم این دیتابیس از کجا میخواد بخونه؟
ّله درسته
همین دیتابیس با Sqlite maneger درست کنم درسته؟
اما پسوند .db نیست
.sqlite درست میکنه
و نمیدونم این دیتابیس چطور درست کنم؟
من الان این بالا تمام مراحل رو توضیح دادم دیگه، چرا اینقدر خودتون رو می پیچونید !!!
پسوند توی فایل های دیتابیس SQLite مهم نیست، شما اون رو تغییر بدید به .db
اگر به هر دلیلی نشد طبق روشی که میگم عمل کنید، من با نرم افزار SQLite Database Browser کار کردم فقط، خیلی هم راحته و کم حجم
تو این نرم افزار دیتابیس رو بسازید و ذخیره کنید با پسوند .db ( پسوند رو خودتون باید اضافه کنید )
بعدش فایل دیتابیس رو زیپ میکنید و طبق آموزش کار با دیتابیس آماده پیش میرید
( من تنها میتونم توی زمینه ای که تجربه دارم راهنمایی کنم، برای همین نرم افزارهای دیگه و پسوندهایی که میدن رو توصیه نمیکنم )
میشه لینک دانلود
SQLite Database Browser
بگذارید؟
از این لینک دانلود کنید
http://sourceforge.net/projects/sqlitebrowser/