PDA

View Full Version : مشکل در استفاده از دیتابیس SQLite از پیش ساخته شده در Android Studio



rezano
شنبه 30 خرداد 1394, 04:17 صبح
با سلام

من دو تا دکمه برای اکتیویتی گزاشتم یکی به اسم Create DB و یکی دیگه به اسم Load DB

در رویداد کلیک Create DB نوشتم:

try {
SQLiteDatabase mydb = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
mydb.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (NAME TEXT);");
mydb.execSQL("INSERT INTO " + TABLE_NAME + " (NAME) VALUES ('Reza')");
mydb.close();
Toast.makeText(getApplicationContext(), "Value Added To Table", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}


که میاد یه دیتابیس میسازه برام و یه سطر دیتا هم اضافه میکنه. (که به درستی هم کار میکنه)


در رویداد کلیک Load DB نوشتم:



try{
SQLiteDatabase mydb = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,null);
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE_NAME, null);
allrows.moveToFirst();
Toast.makeText(getApplicationContext(), allrows.getString(0), Toast.LENGTH_LONG).show();
mydb.close();
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}


و این دکمه هم میاد مقداری که قبلا ریخته شده توی دیتابیس می خونه (که این هم درست کار میکنه)


تا اینجا هم چیز درسته.

حالا من اومدم از مسیر ساخت برنامه دیتابیس رو برداشتم و با پلاگین SQLite Manager برای Firefox اطلاعات رو ویرایش کردم و با دوباره بانک رو سر جاش گزاشتم که بازم مشکلی نبود.
از طریق مسیر زیر پوشه assets رو ایجاد کردم و سپس یک دایرکتوری به اسم databases درونش ساختم و فایل دیتابیسم رو درونش قرار دادم



http://i.stack.imgur.com/nJuct.png



ولی بعد از اجرا با پیغام خطای زیر مواجه میشم


132419

و اطلاعاتم رو بازیابی نمیکرد. بعد از مقداری دستکاری کردن کد بازیابس اطلاعات رو تغییر دادم
یعتی کد:

SQLiteDatabase mydb = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);



را به کد ریز تغییر دادم تا از مسیر مشخص شده دیتابیس رو بخونه :


SQLiteDatabase mydb = SQLiteDatabase.openDatabase("data/data/com.myapp.test004/databases/"+DATABASE_NAME,null, Context.MODE_PRIVATE);
که نتیجه این شد که میبینید:



132418


و البته توی پوشه data/data/com.myapp.test004 هم اثری از پوشه databases نیست.


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

ممنون از وقتی که گزاشتید و پستم رو خوندید.

#root#
شنبه 30 خرداد 1394, 04:27 صبح
دیتابیس رو از پوشه Assets به این مسیر data/data/com.myapp.test004/databases/ کپی میکنید؟ چون در این باره چیزی نگفتید.

rezano
شنبه 30 خرداد 1394, 09:04 صبح
نه صورت دستی کپی نمیکنم!
مگه وقتی توی پوشه assets باشه خود برنامه توی اون مسیر کپی نمیکنه فایل ها رو؟ :افسرده:
با چه دستوری باید کپی کنم؟

#root#
شنبه 30 خرداد 1394, 09:31 صبح
نه خودتون باید این کار رو انجام بدید، قبلاً این سوال چند باری فک کنم مطرح شده تو انجمن، راه های مختلفی برای انجامش وجود داره،

آموزش نمونه (http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/)

کتابخونه مخصوص این کار (https://github.com/jgilfelt/android-sqlite-asset-helper)

اگر دنبال موارد بیشتر خارجی بودید این رو جستجو کنید > android pre populated database