Android - Export and Import SQLite
As I said in this post, you can find the sqlite file of your application in /data/data/APP_PACKGE_NAME/databases/DATABASE_NAME and you can interact directly with this file. In this post I'll show how to export a created sqlite and how to import some sqlite into your application.
Here is the class that I use to do it:
import android.content.Context; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; public class SQLiteTools { private String databaseName; private Context context; public SQLiteTools(Context context, String databaseName) { this.context = context; this.databaseName = databaseName; } public boolean exportDatabase(File to) { File from = this.getCurrentDatabaseFile(); if(!to.getParentFile().exists()) to.getParentFile().mkdirs(); return execute(from, to); } public boolean importDatabase(File from) { File to = this.getCurrentDatabaseFile(); return execute(from, to); } private File getCurrentDatabaseFile() { return new File(context.getDatabasePath(databaseName).getPath()); } private boolean execute(File from, File to){ try { copyFile(from, to); Log.i("SQLITETOOLS FROM/TO", from.getAbsolutePath() + "/" + to.getAbsolutePath()); return true; } catch (IOException e) { Log.i("SQLITETOOLS ERROR", e.getMessage()); } return false; } private void copyFile(File from, File to) throws IOException { FileInputStream in = new FileInputStream(from); FileOutputStream out = new FileOutputStream(to); FileChannel fromChannel = null, toChannel = null; try { fromChannel = in.getChannel(); toChannel = out.getChannel(); fromChannel.transferTo(0, fromChannel.size(), toChannel); } finally { if (fromChannel != null) fromChannel.close(); if (toChannel != null) toChannel.close(); } } }As you can see, there are no complex operations. All what the methods do are copy the sqlite file from your application (using getDatabasePath(databaseName).getPath() to get the path) to a determined location and the inverse operation.
Example of usage:
SQLiteTools sqliteTools = new SQLiteTools(context, "yourdbname"); sqliteTools.exportDatabase(new File("/path/to/export")); sqliteTools.importDatabase(new File("/path/from/import"));Remember to declare in your manifest if you are intended to export to external storage:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
You can download a full example in masterapp repository on my GitHub! Master App contains a lot of examples that could help you. For this post, take a look on sqlite package.
0 comentários: