2011-07-08 14 views
6

मैं अपने एंड्रॉइड ऐप (मोटोरोला ज़ूम पर चल रहे) से कुछ डेटा जारी रखने के लिए ऑर्मेलाइट का उपयोग कर रहा हूं। डिफ़ॉल्ट रूप से, SQL डेटाबेस को डेटा/डेटा/[पैकेज नाम]/डेटाबेस/[dbname] .db में सहेजा जाता है। समस्या यह है कि ज़ूम रूट नहीं है और इसलिए उपयोगकर्ताओं को उस निर्देशिका तक पहुंच नहीं है जहां डीबी सहेजा गया है (डीबी की सामग्री कॉपी/बैकअप/संपादित नहीं कर सकता)।एंड्रॉइड, ऑर्मेलाइट, डीबी स्थान

मैंने डीबी से डेटा को एसडी कार्ड में कॉपी करने के लिए कक्षाओं में से एक में कुछ अतिरिक्त कोड जोड़ा है, जो ठीक काम करता है, लेकिन वास्तव में मुझे लगता है कि डीबी संग्रहीत करने के लिए पथ निर्धारित करना संभव होना चाहिए। क्या मुझे कुछ याद आ रही है, या यह ऑर्मेलाइट के साथ संभव नहीं है?

अग्रिम धन्यवाद, सी

+0

से पहले एंड्रॉइड संस्करणों पर काम नहीं कर सकता है क्या आप डेटा को किसी अन्य स्थान पर सहेजने की कोशिश कर रहे हैं? मैं अस्पष्ट हूं कि आप वास्तव में क्या करना चाहते हैं। –

उत्तर

1

नहीं, आप सीधे डेटाबेस के लिए उपयोग नहीं कर सकते। आप उस निर्देशिका में adb shell से cd का उपयोग कर सकते हैं। यहां इस विषय पर कुछ सुझाव दिए गए हैं: http://developer.android.com/guide/developing/tools/adb.html#sqlite

और मुझे समझ में नहीं आता कि ऑर्मेलाइट के साथ क्या है।

2

आप https://stackoverflow.com/a/3911641 में लड़के की तरह कुछ कर सकते हैं।

जब आप अपनी ऑब्जेक्ट बनाते हैं तो आपके डीबी लेन-देन getReadableDatabase को ओवरराइड करेंगे और आपके कस्टम पथ का उपयोग करने के लिए getRriteableDatabase प्राप्त करेंगे। इस तरह कुछ:

@Override 
public synchronized SQLiteDatabase getWritableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READWRITE); 
} 

@Override 
public synchronized SQLiteDatabase getReadableDatabase(){ 
    return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READONLY); 
} 

यदि मैं आपका ऐप लिख रहा था तो मैं एसडी कार्ड पर डीबी नहीं डालूंगा। यदि उपयोगकर्ता इससे डेटा कॉपी कर रहा है तो ऐप इसे एक्सेस नहीं कर पाएगा। मैं एक 'बैकअप' कार्यक्षमता प्रदान करूंगा जो एसडी कार्ड पर एक्सएमएल, जेएसओएन, या सीएसवी जैसी फाइल बनायेगा। फिर यह उपयोगकर्ता तक रिमोट स्टोरेज पर बैकअप के लिए होगा और आप जानते हैं कि आप हमेशा अपने डीबी तक पहुंच पाएंगे। जब तक आप एक अस्थायी बनना नहीं चाहते हैं और एसडी कार्ड पर सबकुछ मर्ज करना चाहते हैं, तब तक यह उपलब्ध नहीं हो जाता है ... लेकिन यह बहुत अधिक काम की तरह लगता है तो यह लायक है। मुझे उम्मीद है इसने आपके सवाल का जवाब दे दिया है!

6

अगर आप की तरह

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
[...] 
public DatabaseHelper(final Context context) { 
    super(context, Environment.getExternalStorageDirectory().getAbsolutePath() 
    + File.separator + DATABASE_NAME, null, DATABASE_VERSION); 
} 

यह कुछ का उपयोग आप sdcard पर डेटाबेस बना सकते हैं जैसे में db फ़ाइल बनाता है /mnt/sdcard/Android/data/com.your.app/files/myData.sqlite प्रो: आंतरिक मेमोरी बचाता है कॉन: एसडीकार्ड उपलब्ध नहीं होने पर डीबी उपलब्ध नहीं है (उदाहरण के लिए जब यह पीसी से कनेक्ट होता है) इसके अलावा, इसे किसी भी व्यक्ति द्वारा पढ़ा जा सकता है जो प्रो या कॉन हो सकता है।

पर्यावरण.getExternalForageDirectory() के बजाय context.getExternalFilesDir() का उपयोग करना आपके ऐप के लिए विशिष्ट स्थान का उपयोग करेगा और इसे अनइंस्टॉल करने के बाद स्वचालित रूप से साफ़ किया जाएगा (और यह ऐप अपडेट पर भी 2.2 पर दिखाई देता है)।

पीएस मैंने कहीं पढ़ा है कि यह दृष्टिकोण 2.2 (?)

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