|
使用SQLiteOpenHelper 创建的数据库为应用程序私有,其路径一般为DATA/data/APP_NAME/databases/FILENAME
- DATA 为使用Environment.getDataDirectory()返回的路径,一般为你的SD卡的路径。
- APP_Name为你的应用的名称
- FILENAME为你的数据库的文件名
其它程序一般无法访问这个文件,因此也给调试带来了不便,当然你可以使用Android SDK 的sqlite3 工具来直接访问这个数据,但个人还是觉的sqlite 使用起来不是十分方便。
你也可以将数据库创建者SD卡上面,此时可以使用SQLiteDatabase 的openOrCreateDatabase 指定要创建的数据库的文件名(指定SD卡上的某个文件名)。
也可以将数据库使用代码复制到SD卡上。 此时可以使用一些桌面系统上的SQLite管理工具,比如Firefox 的SQL Lite manager 插件来访问这个数据库。
一种简洁的方法是将数据库导出到XML文件,下面类DatabaseDump的实现,可以将如何一个数据库所有表和表的内容导出到XML文件中
import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;class DatabaseDump {public DatabaseDump(SQLiteDatabase db,String destXml) {mDb = db;mDestXmlFilename=destXml;try {// create a file on the sdcard to export the// database contents toFile myFile = new File(mDestXmlFilename);myFile.createNewFile();FileOutputStream fOut = new FileOutputStream(myFile);BufferedOutputStream bos = new BufferedOutputStream(fOut);mExporter = new Exporter(bos);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void exportData() {try {mExporter.startDbExport(mDb.getPath());// get the tables out of the given sqlite databaseString sql = "SELECT * FROM sqlite_master";Cursor cur = mDb.rawQuery(sql, new String[0]);cur.moveToFirst();String tableName;while (cur.getPosition() < cur.getCount()) {tableName = cur.getString(cur.getColumnIndex("name"));// don't process these two tables since they are used// for metadataif (!tableName.equals("android_metadata")&& !tableName.equals("sqlite_sequence")) {exportTable(tableName);}cur.moveToNext();}mExporter.endDbExport();mExporter.close();} catch (IOException e) {e.printStackTrace();}}private void exportTable(String tableName) throws IOException {mExporter.startTable(tableName);// get everything from the tableString sql = "select * from " + tableName;Cursor cur = mDb.rawQuery(sql, new String[0]);int numcols = cur.getColumnCount();cur.moveToFirst();// move through the table, creating rows// and adding each column with name and value// to the rowwhile (cur.getPosition() < cur.getCount()) {mExporter.startRow();String name;String val;for (int idx = 0; idx < numcols; idx++) {name = cur.getColumnName(idx);val = cur.getString(idx);mExporter.addColumn(name, val);}mExporter.endRow();cur.moveToNext();}cur.close();mExporter.endTable();}private String mDestXmlFilename = "/sdcard/export.xml";private SQLiteDatabase mDb;private Exporter mExporter;class Exporter {private static final String CLOSING_WITH_TICK = "'>";private static final String START_DB = "<export-database name='";private static final String END_DB = "</export-database>";private static final String START_TABLE = "<table name='";private static final String END_TABLE = "</table>";private static final String START_ROW = "<row>";private static final String END_ROW = "</row>";private static final String START_COL = "<col name='";private static final String END_COL = "</col>";private BufferedOutputStream mbufferos;public Exporter() throws FileNotFoundException {this(new BufferedOutputStream(new FileOutputStream(mDestXmlFilename)));}public Exporter(BufferedOutputStream bos) {mbufferos = bos;}public void close() throws IOException {if (mbufferos != null) {mbufferos.close();}}public void startDbExport(String dbName) throws IOException {String stg = START_DB + dbName + CLOSING_WITH_TICK;mbufferos.write(stg.getBytes());}public void endDbExport() throws IOException {mbufferos.write(END_DB.getBytes());}public void startTable(String tableName) throws IOException {String stg = START_TABLE + tableName + CLOSING_WITH_TICK;mbufferos.write(stg.getBytes());}public void endTable() throws IOException {mbufferos.write(END_TABLE.getBytes());}public void startRow() throws IOException {mbufferos.write(START_ROW.getBytes());}public void endRow() throws IOException {mbufferos.write(END_ROW.getBytes());}public void addColumn(String name, String val) throws IOException {String stg = START_COL + name + CLOSING_WITH_TICK + val + END_COL;mbufferos.write(stg.getBytes());}}} |
|
|