PDA

View Full Version : بازیابی اطلاعات sqlite



hidden68
شنبه 29 خرداد 1395, 15:42 عصر
سلام
تو اندروید آماتورم

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

پیشاپیش از اساتید محترم تشکر بعمل میاد

hidden68
یک شنبه 30 خرداد 1395, 11:41 صبح
60 نفر مشاهده شده
از 60 نفر هیشکی بلد نیست یعنی؟

hidden68
یک شنبه 30 خرداد 1395, 11:59 صبح
60 نفر مشاهده شده
از 60 نفر هیشکی بلد نیست یعنی؟

hidden68
دوشنبه 31 خرداد 1395, 09:34 صبح
کماکان در انتظار پاسختان هستیم

spiderman200700
دوشنبه 31 خرداد 1395, 19:32 عصر
فایل SQLite برنامه رو بریز توی کامپبوتر و با برنامه های SQLite Viewer بازش کن و ببین.

به چیزی غیر از این نیاز داری؟

Alireza_Ar1
دوشنبه 31 خرداد 1395, 21:29 عصر
سلام برو به مسیری که برنامت توی اونجا نصب شده . فایل دیتابسو کپی کن داخل کامپیوتر بعد با برنامه هایی که مخصوص خواندن نوشتن دیتابیس Sqlite هستن دیتابیستو باز کن اطلاعات ثبت شدتو مشاهده کن .
با چی کد میزنی؟؟؟؟؟

hasan_esfahan
سه شنبه 01 تیر 1395, 14:44 عصر
به صورت پیش فرض از طریق کامپیوتر به اپلیکیشن ها دسترسی نداری
تویی مسیر

data/data/com.example.myapp/



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

یا این که اپلیکیشن را از طریق اندروید استادی, در حالت دیباگ بیاری بالا روی گوشیت

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



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

hidden68
سه شنبه 01 تیر 1395, 15:04 عصر
مرسی از پاسختون
بله متاسفانه دسترسی ندارم به فایل sqlite
اصلا تو اون مسیر هیچ پوشه ایی ندارم
لطفآ در مورد کپی دیتابیس تو اس دی کارت راهنمایی کنید
یا هر مورد دیگه ایی که بشه فقط به فایل sqlite دسترسی داشت

spiderman200700
یک شنبه 06 تیر 1395, 20:27 عصر
این متد رو به صورت موقت توی Activity اصلی برنامت بزار و توی متد onCreate صداش بزن.
بعد برنامه رو اجرا کن.
بعد برو دیتابیستو از توی حافظه داخلی گوشیت کپی کن توی سیستم.



public void exportDatabse(String databaseName) {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();

if (sd.canWrite()) {
String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
String backupDBPath = "backupname.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);

if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {

}
}

hidden68
سه شنبه 08 تیر 1395, 01:15 صبح
مرسی از پاسختون
هیچ تغییری نکرد
هنوزم تو فایل منیجر هیچ پوشه ایی ندارم که از توش دیتابیسو کپی کنم

spiderman200700
سه شنبه 08 تیر 1395, 17:40 عصر
با این کد، فایل دیتابیس کپی میشه توی ریشه sdcard

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

hidden68
چهارشنبه 09 تیر 1395, 17:12 عصر
با این کد، فایل دیتابیس کپی میشه توی ریشه sdcard

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

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

من تو برنامم که دیتابیسش 10 تا رکورد داره کدتون رو اجرا کردم
تو oncreat
اما هیچی توی اس دی کارد نیومد
فایل منی فیست باید چه تغییراتی کنه؟

spiderman200700
چهارشنبه 09 تیر 1395, 18:48 عصر
باید این دسترسی ها در منیفست قرار داده بشه

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


به جای کد قبلی این کد رو تست کنید.




public void exportDatabse(String databaseName) {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();

if (sd.canWrite()) {
String currentDBPath = "/data/" + getPackageName()
+ "/databases/" + databaseName;

InputStream inStream = new FileInputStream(new File(data,
currentDBPath));
OutputStream outStream = new FileOutputStream(new File(sd,
databaseName));

byte[] buffer = new byte[1024];

int length;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}

inStream.close();
outStream.close();

System.out.println("File is copied successful!");

}
} catch (Exception e) {
}
}



دقت داشته باشید که موقه فراخوانی متد، باید نام دیتابیس رو دقیق وارد کنی. مثلا اگر فایل دیتابیس رو با پسوند ذحیره کردید پسوند رو هم وارد کنید. برای مثال databasename.db نه databasename

البته این کد در صورتی که دیتابیس در مسیر /data/data ایجاد شده باشه کار میکنه.

hidden68
شنبه 12 تیر 1395, 17:43 عصر
باید این دسترسی ها در منیفست قرار داده بشه

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


به جای کد قبلی این کد رو تست کنید.




public void exportDatabse(String databaseName) {
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();

if (sd.canWrite()) {
String currentDBPath = "/data/" + getPackageName()
+ "/databases/" + databaseName;

InputStream inStream = new FileInputStream(new File(data,
currentDBPath));
OutputStream outStream = new FileOutputStream(new File(sd,
databaseName));

byte[] buffer = new byte[1024];

int length;
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}

inStream.close();
outStream.close();

System.out.println("File is copied successful!");

}
} catch (Exception e) {
}
}



دقت داشته باشید که موقه فراخوانی متد، باید نام دیتابیس رو دقیق وارد کنی. مثلا اگر فایل دیتابیس رو با پسوند ذحیره کردید پسوند رو هم وارد کنید. برای مثال databasename.db نه databasename

البته این کد در صورتی که دیتابیس در مسیر /data/data ایجاد شده باشه کار میکنه.

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

spiderman200700
یک شنبه 13 تیر 1395, 14:05 عصر
احتمالا دیتابیست توی مسیر /data/data نیست.
دیتابیس رو در چه مسیری و چطوری ایجاد کردی؟

hidden68
یک شنبه 13 تیر 1395, 15:45 عصر
توی اون مسیر چیزی ساخته نشده
شایدم دیده نمیشه و توکاره
کد ساخت دیتابیسم اینه
نمیدونم چطور کسی به این مشکل برخورد نکرده
دیتابیسی که اطلاعاتش اکسترکت نشه به دردی نمیخوره

public class DatabaseManager extends SQLiteOpenHelper {

public DatabaseManager(Context context)
{
super(context, "myDB", null, 1);
}


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

String query = "CREATE TABLE tbl_info ( " +
" id INTEGER PRIMARY KEY AUTOINCREMENT" +
" UNIQUE," +
" fax VARCHAR," +
" email VARCHAR," +
" comment VARCHAR," +
" adress VARCHAR);";

db.execSQL(query);

exportDatabse("myDB");
}


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

}

hidden68
یک شنبه 13 تیر 1395, 15:48 عصر
exportDatabse("myDB");

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

spiderman200700
یک شنبه 13 تیر 1395, 16:45 عصر
باید کار کنه.
اگر گوشیت دسترسی روت داره این مسیر رو چک کن ببین فایل دیتا بیس وجود داره یا نه:

/data/data/app_package/databases/

app_package نام پکیج برنامته

hidden68
یک شنبه 13 تیر 1395, 17:14 عصر
اصلا هیچ پوشه ایی با نام پکیج برنامم ایجاد نمیشه
مشکل همینه
گوشی رو روت هم کردم
همه چی تو کار انجام میشه
پوشه برنامه های دیگه هست
اما برنامه من نیست
با اندروید استادیو هم کار کردم
همین جوری بود
توی گوشی
تبلت
سیستم
همه مدل رو امتحان کردم
هیچ پوشه ایی تو هیچ جای فایل منیجر وجود نداره

spiderman200700
یک شنبه 13 تیر 1395, 17:23 عصر
پکیج برنامت چیه؟
منظورم پکیجی که توی منیفست وارد کردیه

hidden68
یک شنبه 13 تیر 1395, 17:55 عصر
141241
اسم فایل src پکیج برنامه نیست مگه؟

hidden68
دوشنبه 14 تیر 1395, 16:40 عصر
اگه نیازه فایل پروژه رو بزارم چک کنید

spiderman200700
دوشنبه 14 تیر 1395, 18:05 عصر
آره پروژه رو بزار چکش کنم

hidden68
دوشنبه 14 تیر 1395, 18:39 عصر
آره پروژه رو بزار چکش کنم

http://s7.picofile.com/file/8258698518/9.zip.html

spiderman200700
سه شنبه 15 تیر 1395, 13:10 عصر
http://s7.picofile.com/file/8258698518/9.zip.html

فایلی با این آدرس وجود ندارد.

hidden68
سه شنبه 15 تیر 1395, 15:50 عصر
http://0up.ir/do.php?downf=9_1ce09.zip


عذر خواهی میکنم
جای دیگه آپلود کردم
(http://0up.ir/do.php?downf=9_1ce09.zip)

spiderman200700
سه شنبه 15 تیر 1395, 16:27 عصر
دسترسی هایی که گفته بودم رو توی منیفست قرار نداده بودید.
محل فراخوانی متدی که بهتون دادم هم اشتباه بود.

تغییرش دادم درست شد.

hidden68
سه شنبه 15 تیر 1395, 18:06 عصر
دسترسی هایی که گفته بودم رو توی منیفست قرار نداده بودید.
محل فراخوانی متدی که بهتون دادم هم اشتباه بود.

تغییرش دادم درست شد.

تشکر میکنم ازینکه وقت میزارید
شما تست کردید فایل apk رو؟
متاسفانه هیچ تغییری نکرد
نه توی گوشی
نه توی یو ویو

spiderman200700
سه شنبه 15 تیر 1395, 18:20 عصر
من تستش کردم و دیتابیس رو توی حافظه داخلی گوشی کپی کرد

hidden68
چهارشنبه 16 تیر 1395, 12:49 عصر
من تستش کردم و دیتابیس رو توی حافظه داخلی گوشی کپی کرد

میشه لطف کنید بگید فایل دیتابیس کجا سیو میشه؟

spiderman200700
چهارشنبه 16 تیر 1395, 13:16 عصر
گوشی یه External storage داره که ایرانی ها بهش میگن رم. یه internal storage هم داره که بهش میگن حافظه داخلی.

توی حافظه داخلی ذخیره میشه. ریشه حافظه داخلی

hidden68
پنج شنبه 17 تیر 1395, 13:27 عصر
واقعا مرسی
مشکلم حل شد
فقط احتمالا کد ی جا دچار مشکل میشه که از try در میاد
چون println اجرا نمیشه
اما همه رکوردهای دیتابیس به درستی کپی میشه

spiderman200700
جمعه 18 تیر 1395, 10:44 صبح
خواهش میکنم
موفق باشید