{"id":639,"date":"2013-06-05T08:00:22","date_gmt":"2013-06-05T13:00:22","guid":{"rendered":"http:\/\/www.latindevelopers.com\/ivancp\/?p=639"},"modified":"2013-06-05T02:36:05","modified_gmt":"2013-06-05T07:36:05","slug":"copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android","status":"publish","type":"post","link":"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/","title":{"rendered":"Copia de seguridad de sqlite a la unidad sdcard en Android"},"content":{"rendered":"<p>Cuando ya tenemos una aplicaci\u00f3n en producci\u00f3n y ocurre un problema causado por la base de datos suele ser complicado averiguar donde esta el problema, es buena idea tener una copia de la misma base de datos para ver exactamente que esta pasando.<\/p>\n<p>Hace un tiempo que estaba buscando la manera de sacar un backup de la base de datos de una aplicaci\u00f3n en Android, despu\u00e9s de probar varias opciones encontr\u00e9 un segmento de c\u00f3digo que s\u00ed ha funcionado:<\/p>\n<pre lang=\"text\">\r\npublic void backupdDatabase(){\r\n    try {\r\n\t    File sd = Environment.getExternalStorageDirectory();\r\n\t    File data = Environment.getDataDirectory();\r\n\t    String packageName  = \"com.yourapp.package\";\r\n\t    String sourceDBName = \"mydb.db\";\r\n\t    String targetDBName = \"mydb\";\r\n\t    if (sd.canWrite()) {\r\n\t    \tDate now = new Date();\r\n\t\tString currentDBPath = \"data\/\" + packageName + \"\/databases\/\" + sourceDBName;\r\n\t\tSimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd-HH-mm\"); \r\n\t\tString backupDBPath = targetDBName + dateFormat.format(now) + \".db\";\r\n\r\n\t\tFile currentDB = new File(data, currentDBPath);\r\n\t\tFile backupDB = new File(sd, backupDBPath);\r\n\r\n\t\tLog.i(\"backup\",\"backupDB=\" + backupDB.getAbsolutePath());\r\n\t\tLog.i(\"backup\",\"sourceDB=\" + currentDB.getAbsolutePath());\r\n\r\n\t\tFileChannel src = new FileInputStream(currentDB).getChannel();\r\n\t\tFileChannel dst = new FileOutputStream(backupDB).getChannel();\r\n\t\tdst.transferFrom(src, 0, src.size());\r\n\t\tsrc.close();\r\n\t\tdst.close();\r\n\t    }\r\n\t} catch (Exception e) {\r\n\t\tLog.i(\"Backup\", e.toString());\r\n\t}\r\n}<\/pre>\n<p>Ustedes ya se encargan de cambiar los valores y mostrar los mensajes de error.<\/p>\n<p>Me olvidaba que necesitar\u00e1n del permiso para escribir en la memoria SD:<\/p>\n<pre>   &lt;uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" \/&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>Obtenido de: <a href=\"http:\/\/stackoverflow.com\/questions\/1995320\/how-to-backup-database-file-to-sdcard-on-android\" target=\"_blank\">Stackoverflow<\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Compartelo:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-639\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=facebook\" target=\"_blank\" title=\"Haz clic para compartir en Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-639\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=twitter\" target=\"_blank\" title=\"Haz clic para compartir en Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>M\u00e1s<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-email\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-email sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=email\" target=\"_blank\" title=\"Haz clic para enviar por correo electr\u00f3nico a un amigo\"><span>Correo electr\u00f3nico<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/\" target=\"_blank\" title=\"Haz clic para imprimir\"><span>Imprimir<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-639\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=linkedin\" target=\"_blank\" title=\"Haz clic para compartir en LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Cuando ya tenemos una aplicaci\u00f3n en producci\u00f3n y ocurre un problema causado por la base de datos suele ser complicado averiguar donde esta el problema, es buena idea tener una copia de la misma base de datos para ver exactamente &hellip; <a href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Compartelo:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-639\" class=\"share-facebook sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=facebook\" target=\"_blank\" title=\"Haz clic para compartir en Facebook\"><span>Facebook<\/span><\/a><\/li><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-639\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=twitter\" target=\"_blank\" title=\"Haz clic para compartir en Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>M\u00e1s<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-email\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-email sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=email\" target=\"_blank\" title=\"Haz clic para enviar por correo electr\u00f3nico a un amigo\"><span>Correo electr\u00f3nico<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/\" target=\"_blank\" title=\"Haz clic para imprimir\"><span>Imprimir<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-639\" class=\"share-linkedin sd-button share-icon\" href=\"https:\/\/www.latindevelopers.com\/ivancp\/2013\/06\/copia-de-seguridad-de-sqlite-a-la-unidad-sdcard-en-android\/?share=linkedin\" target=\"_blank\" title=\"Haz clic para compartir en LinkedIn\"><span>LinkedIn<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":""},"categories":[10],"tags":[46,37,51,50],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1tEO5-aj","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/639"}],"collection":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/comments?post=639"}],"version-history":[{"count":6,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/639\/revisions"}],"predecessor-version":[{"id":645,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/posts\/639\/revisions\/645"}],"wp:attachment":[{"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/media?parent=639"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/categories?post=639"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.latindevelopers.com\/ivancp\/wp-json\/wp\/v2\/tags?post=639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}