2012-10-04 4 views
11

मैं अपने ऐप में "प्री लोडेड" डेटाबेस का उपयोग करना चाहता हूं। इस बारे में बहुत सारे प्रश्न हैं और इस ब्लॉग आलेख here या सिमिलर्स के अधिकांश बिंदु हैं।प्रोग्रामिंग के रूप में मेरे ऐप के लिए डेटाबेस निर्देशिका प्राप्त करें

अभी तक इतना अच्छा है।

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/"; 

मेरा मतलब है, हो सकता है कि भविष्य में या शायद एक डिवाइस में बदल गया है: मैं बस अगर वहाँ तो आप कुछ इस तरह का उपयोग करने की जरूरत नहीं है डिफ़ॉल्ट डेटाबेस निर्देशिका पाने के लिए एक बेहतर तरीका है जानना चाहता हूँ या रोम इसे कहीं और रख सकता है ... तो क्या इस पथ को प्रोग्रामिक रूप से प्राप्त करने का कोई तरीका है?

संदर्भ में getDatabasePath (नाम) के लिए एक विधि मौजूद है, लेकिन आप इसे एक मौजूदा डाटाबेस नाम देने के लिए की जरूरत है और अच्छी तरह से ... यह अभी तक मौजूद नहीं है, मैं इसे वहाँ ले जाना चाहते हैं: पी

+0

http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android- आवेदन/910 9 728 # 910 9 728 –

उत्तर

6

एक खाली डीबी बनाएँ, getDatabasePath() साथ पथ मिलता है, तो अपने स्वयं के साथ इसे अधिलेखित।

+1

मैं पहले से ही यह कर रहा था ... लेकिन एक हैक की तरह लगता है: डी लेकिन अच्छा ... यह निश्चित रूप से काम करता है। –

+4

ठीक है, चूंकि तैयार किए गए डीबी फ़ाइल को आयात करने के लिए कोई आधिकारिक एपीआई नहीं है, इसलिए अपनी फाइल डालने पर एक हैक भी है। कम से कम आप यह सुनिश्चित कर रहे हैं कि आप इसे सही जगह पर डाल रहे हैं। –

+0

क्या मुझे इसके लिए लिखने की अनुमति चाहिए? – Simon

6

आप इस फ़ोल्डर को प्राप्त करने के लिए विधि getFilesDir() या getDatabasePath गतिविधि-कक्षा में उपयोग कर सकते हैं।
अधिक जानकारी here

10

मैं इस्तेमाल किया ...

String destPath = getFilesDir().getPath(); 
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases"; 
+1

के लिए कोई विशेष अनुमति की आवश्यकता नहीं है यदि भविष्य में रिलीज में फ़ोल्डर बदलता है तो क्या होगा? – pablisco

7

SQLiteAssetHelper द्वारा उपयोग किया:

String path = mContext.getDatabasePath(mName).getPath(); 

इस समय, डेटाबेस मौजूद नहीं है। मुझे लगता है कि स्ट्रिंग सिर्फ आंतरिक पथ लेती है और उचित संशोधक जोड़ती है।

context.getDatabasePath("a").getParentFile() 

मूल रूप से, आपके द्वारा बनाए गए कोई वास्तविक डेटाबेस के लिए, बस इसे एक के लिए पूछने की जरूरत नहीं है: वास्तव में, यह ठीक से काम करने लगता है।

+2

डेटाबेस निर्देशिका किसी भी सामग्री को लिखने/प्रतिलिपि करने से पहले मौजूद नहीं हो सकती है .getDatabasePath ("a") उस संदर्भ को जांचने के लिए सुनिश्चित करें .getDatabasePath ("a")। GetParentFile() मौजूद है और निर्देशिका नहीं बनाते हैं। – nibarius

1

आप अपने सहायक कक्षा में getDatabasePath विधि का उपयोग कर सकते हैं:

public class MyDatabase extends SQLiteAssetHelper { 

    private static final String DATABASE_NAME = "wl.db"; 
    private static final int DATABASE_VERSION = 1; 
    public String databasePath = "";  

    public MyDatabase(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

     // you can use an alternate constructor to specify a database location 
     // (such as a folder on the sd card) 
     // you must ensure that this folder is available and you have permission 
     // to write to it 
     // super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION); 

     databasePath = context.getDatabasePath("wl.db").getPath(); 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे