दिलचस्प पोस्ट
AJAX, उपडोमेन, और SSL किस परिस्थिति में एक स्क्वॉश कनेक्शन स्वचालित रूप से एक परिवेश लेन-देन लेन-देन लेन-देन में भर्ती है? कैसे एक एनिमेटेड gif बनाने के लिए शुद्ध Linq में Row_number over (xxx द्वारा विभाजन)? पासवर्ड सत्यापन regex बिगइंटेगर की कोई सीमा नहीं होती है? 60 सेकंड में स्थिर फ़ायरफ़ॉक्स कनेक्शन प्राप्त करने में असमर्थ (127.0.0.1:7055) मर्ज किए गए कवरेज रिपोर्ट देने के लिए मल्टी-मॉड्यूल मैवेन + सोनार + जाकोओ को कैसे कॉन्फ़िगर करें? एएसपी.नेट एमवीसी में टेम्पटडाटा बनाम सत्र का उपयोग कब किया जाए Ggplot2 पौराणिक प्रदर्शन आदेश को नियंत्रित करना PHP घातक त्रुटि आवश्यक फ़ाइल को खोलने में विफल रहा एक स्थिर कक्षा को सीरियल करना? 32-बिट जेवीएम (SWT फ़ाइल की जगह) पर 64-बिट SWT पुस्तकालयों को लोड नहीं किया जा सकता Boost :: asio का उपयोग करते समय मुझे प्रत्येक कनेक्शन की आवश्यकता क्यों है? SQL सर्वर में सशर्त WHERE खंड

मैं एंड्रॉइड पर एसडी कार्ड में डेटाबेस फ़ाइल कैसे बैकअप करूं?

मैं अपने एंड्रॉइड ऐप में एक फीचर जोड़ना चाहूंगा जो कि एसडी कार्ड पर स्वचालित रूप से एसक्यूएलईटी डाटाबेस का बैक अप लेता है।

इस बारे में जाने का सबसे अच्छा तरीका क्या है? क्या कोई उदाहरण या ट्यूटोरियल उपलब्ध हैं?

वेब के समाधान से एकत्रित समाधान "मैं एंड्रॉइड पर एसडी कार्ड में डेटाबेस फ़ाइल कैसे बैकअप करूं?"

SQLite डेटाबेस पूरी तरह से आत्म निहित फाइलें हैं और पोर्टेबल हैं – आप सीधे संपूर्ण फ़ाइल की प्रतिलिपि SD कार्ड पर कर सकते हैं।

हालांकि पहले मुझे यह पता था कि क्या डिवाइस में एक एसडी कार्ड स्थापित है या नहीं, और इसका पथ क्या है ( Environment.getExternalStorageDirectory() का उपयोग करते हैं।

यह कोड मेरे लिए काम करता है!

  try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String currentDBPath = "//data//{package name}//databases//{database name}"; String backupDBPath = "{database name}"; 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) { } 

क्या किसी को पता है कि यह गैर रूट फोन पर काम करेगा? मैंने केवल एक रूट जी 1 पर कोशिश की है।

 try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String currentDBPath = "//data//"+ packageName +"//databases//"+dbList[0]; String backupDBPath = dbList[0]; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); Toast.makeText(getBaseContext(), backupDB.toString(), Toast.LENGTH_LONG).show(); } } catch (Exception e) { Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); } 

यह उपरोक्त उदाहरणों के विपरीत काम करता है, जिसमें "/" "मेरी 20 मिनट का जीवन व्यतीत किया गया है, लेकिन मुझे वाकई यह देखना चाहिए था कि जितनी जल्दी हो। Toast आपको बताएगा कि फ़ाइल कहाँ रही है या आपको बताती है कि जब यह काम नहीं करता है तो क्या गलत है।

मैंने इस तरह के एक प्रश्न के समान उत्तर दिया है जो आप अपने SQLiteOpenHelper में रख सकते हैं। यह डीब फाइल को किसी प्रकार के बाह्य भंडारण से कॉपी करने के लिए उतना आसान है, आंतरिक एप्लीकेशन स्टोरेज में। इसमें कुछ अतिरिक्त कोड भी है जो डीबी फाइल को खोलता है और पढ़ता है यह सुनिश्चित करने के लिए कि यह एंड्रॉइड के लिए डेटाबेस को कॉल करने के लिए उचित स्थिति में है।

 public static void BackupDatabase() throws IOException { boolean success =true; File file = null; file = new File(Environment.getExternalStorageDirectory() +"/MOLS_Backup"); if (file.exists()) { success =true; } else { success = file.mkdir(); } if (success) { String inFileName = "/data/data/com.sygic.sdk.demo/databases/MOLS_DB.s3db"; File dbFile = new File(inFileName); FileInputStream fis = new FileInputStream(dbFile); String outFileName = Environment.getExternalStorageDirectory()+"/MOLS_Backup/MOLS_DB.s3db"; // Open the empty db as the output stream OutputStream output = new FileOutputStream(outFileName); // Transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer))>0) { output.write(buffer, 0, length); } output.flush(); output.close(); fis.close(); } } 

मुझे नहीं पता कि क्या होता है अगर फोन निहित होता है या नहीं, लेकिन आपको अपनी फाइलें इन्हें लिखना चाहिए:

 /Android/data/{package_name}/files/ 

यह काम करेगा कि क्या यह निहित है या नहीं

आपको अपने आवेदन में android.permission.WRITE_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE की अनुमति देना होगा। यह unrooted उपकरणों पर ठीक काम करता है

यदि आप इस में नए हैं, तो आप डेटाबेस एडाप्टर में अपना डेटाबेस नाम ढूंढ सकते हैं।

ध्यान दें कि आप यह साझा साझाकरण के लिए भी कर सकते हैं लेकिन अपने संदर्भ को बदलने के लिए ध्यान रखें। MODE_PRIVATE प्रसंग। MODE_MULTI_PROCESS।

SharedPreferences_name को इस तरह दिखना चाहिए = ExportSP("temp.xml");

 String currentPathForSharedPreferences = "/data/"+ context.getPackageName() +"/shared_prefs/"+ SharedPreferences_name; 

निर्यात के लिए

 exportDB("MyDbName"); private void exportDB(String db_name){ File sd = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator + "Your Backup Folder"+ File.separator ); boolean success = true; if (!sd.exists()) { success = sd.mkdir(); } if (success) { File data = Environment.getDataDirectory(); FileChannel source=null; FileChannel destination=null; String currentDBPath = "/data/"+ context.getPackageName() +"/databases/"+db_name; String backupDBPath = db_name; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); try { source = new FileInputStream(currentDB).getChannel(); destination = new FileOutputStream(backupDB).getChannel(); destination.transferFrom(source, 0, source.size()); source.close(); destination.close(); Toast.makeText(this, "Please wait", Toast.LENGTH_SHORT).show(); } catch(IOException e) { e.printStackTrace(); } }} 

आयात के लिए

 importDB("MyDbName"); private void importDB(String db_name){ File sd = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + File.separator + "Your Backup Folder"+ File.separator ); File data = Environment.getDataDirectory(); FileChannel source=null; FileChannel destination=null; String backupDBPath = "/data/"+ context.getPackageName() +"/databases/"+db_name; String currentDBPath = db_name; File currentDB = new File(sd, currentDBPath); File backupDB = new File(data, backupDBPath); try { source = new FileInputStream(currentDB).getChannel(); destination = new FileOutputStream(backupDB).getChannel(); destination.transferFrom(source, 0, source.size()); source.close(); destination.close(); Toast.makeText(this, "Please wait", Toast.LENGTH_SHORT).show(); } catch(IOException e) { e.printStackTrace(); } } 
 @Override protected void onCreate(Bundle savedInstanceState) { try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String currentDBPath = "//data//"+getPackageName()+"//databases//"+DATABASE_NAME+""; String backupDBPath = "backup.db"; File currentDB = new File(data, currentDBPath); File backupDB = new File(sd, backupDBPath); FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); Toast.makeText(getBaseContext(), backupDB.toString(), Toast.LENGTH_LONG).show(); } } catch (Exception e) { Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); } } 

यदि सफलता ब्लॉक मुझे इस पर एक त्रुटि दे:

 String inFileName = context.getDatabasePath(DB-Name); File dbFile = new File(inFileName); FileInputStream fis = new FileInputStream(dbFile);