استفاده از دیتابیس از قبل آماده شده در پروژه
یه برنامه دارم که خارج از برنامه دیتابیس sqlite اونرو ساختم و میخوام توی برنامم و در Activity G اونو لود کنم و در قسمت های دیگه ازش استفاده کنم و بهش کوئری بزنم .
لطفا راهنمائیم کنید که دیتابیس رو کجا ( مثلا باید توی پوشه asset ) قرار بدم که روی هر گوشی که برنامه اجرا میشه دیتابیس کپی شه ؟؟
یه سرچ توی اینترنت کردم به database helper ها برخوردم , اگه کسی طریقه استفاده از اونا رو بلده آموزش بده !!!
- این فایل رو دانلود کنید
- اون رو در پوشه libs پروژه تون کپی کنید.
- یک کلاس دقیقا مثل زیر با نام MyDatabase بسازید:
package com.example.app; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.provider.ContactsContract.RawContacts.Data; public class MyDatabase extends SQLiteAssetHelper { private static final int DATABASE_VERSION = 1; public MyDatabase(Context context,String name) { super(context, name, null, DATABASE_VERSION); } public SQLiteDatabase database() { SQLiteDatabase database = null; return database; } } - دیتابیستون رو که با پسوند db است تبدیل به فایل zip کنید:
- فایل زیپ شده رو در پوشه ای با نام databases در assets بریزید.
- در هر جایی از برنامه که نیاز به دیتابیس داشتید این کار رو انجام بدید:
دقت کنید نامی که در خط سوم نوشته شده باید دقیقا همنام فایل زیپ و فایل db ی داخل فایل زیپ باشد.
همچنین باید بدون پسوند باشد. -
MyDatabase my; SQLiteDatabase sq;
my = new MyDatabase(this, "database");
sq = my.getWritableDatabase();
Cursor cursor = sqlite.rawQuery("select * from table_name", null); - سوالی بود در خدمتم
من همه ی کارایی که اولش گفتین رو انجام دادم ولی
public class TestActivity extends Activity {
public ArrayAdapter adapter;
public static SQLiteDatabase sqlite;
public MyDatabase database;
public SQLiteDatabase sql;
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lahje);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(G.notes);
lstContent.setAdapter(adapter);
/***********************************
* create Query
*/
database = new MyDatabase(this, "database");
sql = database.getWritableDatabase();
Cursor cursor = sqlite.rawQuery("select * from table", null);
StructNote note = new StructNote();
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("subject"));
note.title = name;
G.notes.add(note);
}
cursor.close();
/***********************************/
adapter.notifyDataSetChanged();
}
}
به خط Cursor که موقع اجرا میرسه برنامه کرش میکنه , مشکل از چییه ؟
راستی بگو چجوری دیتابیسم رو که با پسوند sqlite هست به db تغییر بدم , من دستی تغییر دادم ؛ اگه با نرم افزاری باید اونو convert کرد بگو چجوری ؟
اینم عکس پوشه ها و محل دیتابیس :

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