ডিভাইসে স্ক্লাইট ডাটাবেসের অবস্থান


100

আমি প্রসারিত SQLiteOpenHelperএবং ওভাররাইডের ডিফল্ট পদ্ধতিটি সহ একটি স্ক্লাইট ডাটাবেস তৈরি করেছি onCreate()। এইভাবে ডিবি যখন প্রয়োজন হয় তখন উড়তে তৈরি হয়।

আমি একটি স্ক্লাইট ব্রাউজার সহ আমার ওএস এক্স মেশিনে ডিবি ফাইলের সামগ্রীগুলি পরীক্ষা করতে চাই to আমি ডিবি ফাইলের নাম জানি, তবে আমি এটি ডিভাইসে খুঁজে পাচ্ছি না। আমি ইউএসবির মাধ্যমে ডিভাইসে সংযুক্ত হয়েছি এবং অনুসন্ধানকারী এবং টার্মিনালের সাথে দেখেছি, তবে আমি কেবল ডিবি ফাইলটি খুঁজে পাচ্ছি না।

অ্যান্ড্রয়েড ডিভাইসে স্ক্লাইট ডাটাবেসের জন্য ডিফল্ট অবস্থান কী?


এখানে দেখুন:
কর্মসূচির

উত্তর:


96

আপনি নিজের তৈরি ডাটাবেস, নাম খুঁজে পেতে পারেন <your-database-name>

ভিতরে

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>

ফাইল এক্সপ্লোরার ব্যবহার করে এটিকে টানুন এবং এসকিউএলএক্সপ্লেজারে এটি ব্যবহার করার জন্য .db3 এক্সটেনশানটির নাম পরিবর্তন করুন

এমুলেটর ডিরেক্টরিতে নেভিগেট করতে ডিডিএমএসের ফাইল এক্সপ্লোরার ব্যবহার করুন।


4
যখন আমি এটি একটি এমুলেটরটিতে চেষ্টা করি তখন আমি সিডি করতে পারি / ডেটা। তবে আমি যখন আমার সংযুক্ত গ্যালাক্সি ভাইব্র্যান্ট দিয়ে এটি চেষ্টা করি তখন আমি ডেটাতে সিডি করতে পারি না। অ্যাডবি সার্ভারটি কি এই দুটি ক্ষেত্রে আলাদা ব্যবহার হিসাবে চালিত হয়?
রোব

42
বাস্তব ফোনে আপনার / ডেটা ফোল্ডারে অ্যাক্সেস নেই। এটা chmoded 700। এটি দেখতে আপনার মূল অধিকার প্রয়োজন।
ফালমারী

15
আপনি যদি অ্যাপ্লিকেশন থেকে পাথ পেতে চান তবে সেক্ষেত্রে এটি প্রসঙ্গ। যা প্রকৃতপক্ষে উপরের পথে ফিরে আসে। আপনি পাঠ্য-লেখার জন্য এই পাথটি অ্যাক্সেস করতে পারেন তবে কেবলমাত্র সেই অ্যাপ্লিকেশন থেকে যা ডেটাবেস তৈরি করেছে।
ইয়ারোস্লাভ মেটকালিক

ডিফল্ট পাথ যেখানে অ্যান্ড্রয়েড ডাটাবেসগুলি সংরক্ষণ করে সেগুলি অ-রুটযুক্ত ডিভাইসে অ্যাক্সেস করা যায় না। সুতরাং, ডাটাবেস ফাইল অ্যাক্সেসের সবচেয়ে সহজ উপায় (কেবলমাত্র ডিবাগিং পরিবেশের জন্য) ক্লাসের নির্মাতা পরিবর্তন করা। এর একের পরে কিছু উত্তর (ঠিক এখানে: stackoverflow.com/a/21832714/2982814 ), আপনি কীভাবে এটি পরিচালনা করেছিলেন তা পাবেন।
র্যান্ডম ব্যবহারকারী


45

এই জন্য, আমি কি ছিল

File f=new File("/data/data/your.app.package/databases/your_db.db3");
FileInputStream fis=null;
FileOutputStream fos=null;

try
{
  fis=new FileInputStream(f);
  fos=new FileOutputStream("/mnt/sdcard/db_dump.db");
  while(true)
  {
    int i=fis.read();
    if(i!=-1)
    {fos.write(i);}
    else
    {break;}
  }
  fos.flush();
  Toast.makeText(this, "DB dump OK", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
  e.printStackTrace();
  Toast.makeText(this, "DB dump ERROR", Toast.LENGTH_LONG).show();
}
finally
{
  try
  {
    fos.close();
    fis.close();
  }
  catch(IOException ioe)
  {}
}

এবং এটি করার জন্য, আপনার অ্যাপ্লিকেশনটির এসডি কার্ড অ্যাক্সেস করার অনুমতি থাকতে হবে, আপনার ম্যানিফেস্ট.এক্সএমএলে নিম্নলিখিত সেটিংসটি যুক্ত করুন

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

একটি উজ্জ্বল উপায় নয়, কিন্তু কাজ করে।


ভাল লাগল আমি এটা খুঁজছিলাম। বিশ্লেষণের জন্য এইভাবে কোনও সার্ভারে সম্পূর্ণ ডিবি আপলোড করাও চয়ন করতে পারেন।
জেরোইন 21

4
যদি এটি কাজ না করে ... ডাটাবেসটির নাম ব্যবহার করুন "/data/data/your.app.package/databases/your_db" কেবল এক্সটেনশন সরান ".db3"
নাইজেল ক্রাস্টো

4
এই সমাধান ভাল কাজ করে। তবে, আপনি ফাইল অবজেক্ট পেতে getDatediaPath (your_db_name) ব্যবহার করতে পারেন এবং এটি নির্মাণের পরিবর্তে সঠিক পাথ পেতে getAbsolvePath () ব্যবহার করতে পারেন। গেটডেটিবেসপথ পদ্ধতিটি কনটেক্সট্র্যাপারে সংজ্ঞায়িত করা হয়েছে।
রায়

ফাইল এবং পথের নামগুলি অ্যান্ড্রয়েডে কেস সংবেদনশীল।
অ্যান্ড্রয়েডদেভ

31

প্রসঙ্গে অনেকগুলি পাথ ফাংশন রয়েছে:
প্রসঙ্গটি।

Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);

ফিরে আসা পথটি এক্ষেত্রে এমন কিছু হবে:

/data/data/com.me.myapp/databases/mydb.db

মনে রাখবেন যে ডিবি খোলার জন্য এসকিউএলওপেনহেল্পার ব্যবহার করে এই পাথটি স্বয়ংক্রিয়ভাবে তৈরি।


25

আপনি যদি সত্যিকারের ডিভাইসের কথা বলছেন /data/data/<application-package-name>তবে অ্যাক্সেসযোগ্য। আপনার অবশ্যই মূল অধিকার থাকতে হবে ...


এটা ঠিক সত্য নয়। এটি ব্রাউজযোগ্য নয় , তবে এর মধ্যে ফাইলগুলির অ্যাক্সেসযোগ্যতা তাদের পৃথক অনুমতি বিটের উপর নির্ভর করে।
ক্রিস

আমার ফোনটি রুট হয়েছে। আমি কীভাবে ডেটা ফোল্ডারটি "ব্রাউজ" করতে পারি?
শ্রীচরণ দেশবাতুলা

@ সরিচরণডেসাবতুলা, আপনাকে ডিরেক্টরি ব্রাউজ করতে "su" কমান্ডটি ব্যবহার করে অ্যাডবি শেলটিতে যেতে হবে এবং সুপারইউসারটিতে যেতে হবে।
গৌতম সি

/ সিস্টেম / বিন / শ:

@ সুনিডে চেষ্টা করুনsudo su
মোহাম্মদসালিম শিবানী

19

এটি এবং পুরানো প্রশ্ন, তবে উত্তর দেওয়া অন্যকে সাহায্য করতে পারে।

ডিফল্ট পাথ যেখানে অ্যান্ড্রয়েড ডাটাবেসগুলি সংরক্ষণ করে সেগুলি অ-রুটযুক্ত ডিভাইসে অ্যাক্সেস করা যায় না। সুতরাং, ডাটাবেস ফাইল অ্যাক্সেসের সবচেয়ে সহজ উপায় (কেবলমাত্র ডিবাগিং পরিবেশের জন্য) শ্রেণীর নির্মাতা পরিবর্তন করা:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "/mnt/sdcard/database_name.db", null, 0);
    }
}

এই লাইনের সাথে উত্পাদন পরিবেশের জন্য পরিবর্তন মনে রাখবেন:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "database_name.db", null, 0);
    }
}

আমি এই চেষ্টা এবং ত্রুটি ফিরিয়ে Failed to open database '/mnt/sdcard/itens'.মধ্যেLogcat
underfilho

4
আমি খুবই দুঃখিত. এই উত্তরটি চার বছরের পুরনো। এবং ওপি এর চেয়ে পুরানো (2010)। এই সময়ে, অ্যান্ড্রয়েড 2010 এর তুলনায় উল্লেখযোগ্যভাবে পৃথক So সুতরাং ডাটাবেসের অবস্থান অন্য পথে হতে পারে। আমি দুঃখিত আমি আপনাকে আরও সাহায্য করতে পারে না।
র্যান্ডম ব্যবহারকারী

সম্ভবত ত্রুটি ঘটেছে কারণ অ্যাপটি লিখতে দেওয়া হয়নি, যাইহোক ধন্যবাদ
আন্ডারফিলহ


9

একটি এসকিউএল ডাটাবেস কেবল একটি ফাইল। আপনি এই ফাইলটি নিতে পারেন, এটিকে চারপাশে সরিয়ে নিতে পারেন, এবং এমনকি এটি অন্য সিস্টেমে অনুলিপি করতে পারেন (উদাহরণস্বরূপ, আপনার ফোন থেকে আপনার ওয়ার্কস্টেশনে), এবং এটি ঠিক কাজ করবে। অ্যান্ড্রয়েড /data/data/packagename/databases/ডিরেক্টরিটিতে ফাইল সঞ্চয় করে । আপনি adb commandএটি দেখতে বা স্থানান্তর করতে বা মুছতে File Explorer viewEclipse ( Window > Show View > Other... > Android > File Explorer) ব্যবহার করতে পারেন ।


9

ভাল এটি দেরি হতে পারে তবে এটি সাহায্য করবে। আপনি ছাড়া ডাটাবেস অ্যাক্সেস করতে পারেন অ্যাডবির মাধ্যমে আপনার ডিভাইসটি রুট

সিএমডি ব্যবহার করে অ্যাডবি শুরু করুন এবং নিম্নলিখিত কমান্ডগুলি টাইপ করুন

-run-as com.your.package  
-shell@android:/data/data/com.your.package $ ls  
cache  
databases  
lib  
shared_prefs  

এখন আপনি এখান থেকে খুলতে পারেন।


4
হ্যাঁ, একটি ডিবাগ APK এর জন্য। না, একটি উত্পাদনের জন্য (বা অ্যান্ড্রয়েড রিলিজগুলিতে যেখানে রান-অ্যাস ভেঙে গেছে)।
ক্রিস

5

আপনি যদি কোনও পথ না দিয়েই আপনার ডিবিটির নাম ফাইল হিসাবে রাখেন তবে এর ফোল্ডারটি পাওয়ার সর্বাধিক সাধারণ উপায় হ'ল:

final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);

যেখানে "মাইডাটাবেস.ডিবি" এর মতো DBAdapter.DATABASE_NAMEএকটি Stringজায়গা রয়েছে।
Context.getFilesDir()অ্যাপ্লিকেশনগুলির ফাইলগুলির জন্য পথ /data/data/<your.app.packagename>/files/ফেরায় যেমন: আপনার .getParent()+"/databases/""ফাইল" অপসারণ এবং তার পরিবর্তে "ডাটাবেসগুলি" যুক্ত করার জন্য কেন দরকার ts
বিটিডাব্লু Eclipse আপনাকে হার্ডকডযুক্ত "ডেটা / ডেটা /" স্ট্রিং সম্পর্কে সতর্ক করবে তবে এই ক্ষেত্রে নয়।


3
By Default it stores to:    

String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME;

Where:

String DATABASE_NAME = "your_dbname";
String PACKAGE_NAME = "com.example.your_app_name";

এবং আপনার ডাটাবেসটি ডিভাইস স্টোরেজে সঞ্চয় করা আছে কিনা তা পরীক্ষা করুন। যদি তাই হয় তবে আপনাকে ম্যানিফেস্ট.এক্সএমএল এ অনুমতি ব্যবহার করতে হবে:

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

3

আপনি কীভাবে অ্যাডবি শেল ব্যবহার করে এটি অ্যাক্সেস করতে পারেন

উপরের লিঙ্ক থেকে সামগ্রী:

টিউটোরিয়াল: কমান্ড লাইন ব্যবহার করে কীভাবে একটি অ্যান্ড্রয়েড ডাটাবেস অ্যাক্সেস করবেন। আপনি যখন আপনার প্রোগ্রামে একটি ডাটাবেস নিয়ে কাজ শুরু করেন, প্রোগ্রামটি স্রেফ কী করেছে তা যাচাই করতে এবং ডিবাগ করার জন্য এটি সরাসরি আপনার প্রোগ্রামের বাইরে অ্যাক্সেস করতে সক্ষম হওয়া সত্যিই গুরুত্বপূর্ণ এবং দরকারী।

এবং এটি অ্যান্ড্রয়েডেও গুরুত্বপূর্ণ।

এটি কীভাবে করা যায় তা এখানে:

1) এমুলেটরটি চালু করুন (বা আপনার পিসিতে আপনার আসল ডিভাইসটি সংযুক্ত করুন)। আমি এ জন্য সাধারণত একটি প্রোগ্রাম থেকে আমার একটি প্রোগ্রাম চালু করি। 2) অ্যান্ড্রয়েড সরঞ্জাম ডিরেক্টরিতে একটি কমান্ড প্রম্পট চালু করুন। 3) অ্যাডবি শেল টাইপ করুন। এটি আপনার এমুলেটর / সংযুক্ত ডিভাইসে একটি ইউনিক্স শেল চালু করবে। ৪) আপনার ডাটাবেস যেখানে আছে সেই ডিরেক্টরিতে যান: সিডি ডেটা / ডেটা এখানে আপনার ডিভাইসে থাকা সমস্ত অ্যাপ্লিকেশনগুলির তালিকা রয়েছে আপনার অ্যাপ্লিকেশন ডিরেক্টরিতে যান (সাবধান, ইউনিক্স কেস সংবেদনশীল !!) সিডি com.alocaly.LetterGame এবং অবতরণ করুন আপনার ডাটাবেস ডিরেক্টরিতে: সিডি ডাটাবেস এখানে আপনি আপনার সমস্ত ডাটাবেস খুঁজে পেতে পারেন। আমার ক্ষেত্রে, কেবলমাত্র একটি (এখন) রয়েছে: এসসিআরইডিডিবি 5) আপনি যাচাই / পরিবর্তন করতে চান সেই ডাটাবেসে স্ক্লাইটটি চালু করুন: sqlite3 SCORE_DB এখান থেকে, আপনি কী টেবিল উপস্থিত রয়েছে তা পরীক্ষা করতে পারেন:। টেবিল 6) আপনি যে কোনও এসকিউএল নির্দেশিকাটি প্রবেশ করান : স্কোর থেকে * নির্বাচন করুন;

এটি বেশ সহজ, তবে যতবারই আমার এটি প্রয়োজন হয় আমি জানি না এটি কোথায় খুঁজে পাবে।


1

যদি আপনার অ্যাপ্লিকেশন একটি ডেটাবেস তৈরি করে, এই ডাটাবেসটি ডিফল্টরূপে ডিরেক্টরিতে সংরক্ষিত হয় DATA/data/APP_NAME/databases/FILENAME.

উপরোক্ত ডিরেক্টরিগুলির অংশগুলি নীচের নিয়মের ভিত্তিতে নির্মিত হয়। ডেটা হ'ল সেই পথ যা এনভায়রনমেন্ট.টেটডাটা ডিরেক্টরী () পদ্ধতিটি ফিরে আসে। অ্যাপ্লিকেশন আপনার অ্যাপ্লিকেশন নাম। ডাটাবেসের জন্য আপনার অ্যাপ্লিকেশন কোডে যে নামটি নির্দিষ্ট করা হয়েছে তা হ'ল ফাইল ফাইল।


0

আপনার IDE- র Eclipse এর DDMS দৃষ্টিভঙ্গির মতো কোনও ইউটিলিটি রয়েছে কিনা তা যাচাই করতে পারেন যা আপনাকে ডিরেক্টরিটি ব্রাউজ করতে এবং / অথবা এমুলেটর বা মূলযুক্ত ডিভাইস থেকে এবং ফাইলগুলি অনুলিপি করতে দেয়।


0

আপনার ডাটাবেসের নামটির মতো সংজ্ঞা দিন:

private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";

এবং আপনি এখানে আপনার ডাটাবেস দেখতে পারেন:

storage/sdcard0/yourdatabasename.db

0

পাবলিক ক্লাস মাইএসকিউলাইটওপেনহেল্পার এসকিউএলইপেনহেল্পারকে প্রসারিত করে {মাইএসকিউলাইট ওপেনহেল্পার (প্রসঙ্গে প্রসঙ্গ) {সুপার (প্রসঙ্গ, "/mnt/sdcard/datedia_name.db", নাল, 0); }}

"/ এসডিকার্ড /" হার্ডকোড করবেন না; পরিবর্তে এনভায়রনমেন্ট.জেটএক্সটার্নাল স্টোরেজ ডিরেক্টরী ()। getPath () ব্যবহার করুন


0

মত হার্ডকোড পথ না //data/data/<Your-Application-Package-Name>/databases/<your-database-name>। ভাল এটি বেশিরভাগ ক্ষেত্রে কাজ করে তবে এইটি এমন ডিভাইসে কাজ করছে না যেখানে ডিভাইস একাধিক ব্যবহারকারীকে সমর্থন করতে পারে। পথটি এমন হতে পারে //data/user/10/<Your-Application-Package-Name>/databases/<your-database-name>। এর সম্ভাব্য সমাধানটি ব্যবহার করা হচ্ছে context.getDatabasePath(<your-database-name>)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.