在Android中将SQLite数据库导出为XML文件

8
我知道这是可能的,但我不太确定从哪里开始。有人能实现这个吗?
谢谢。
3个回答

4
本文介绍的DataXmlExporter类将会把一个SQL Lite数据库导出为XML文件。

http://www.screaming-penguin.com/node/7749

完整的示例代码可在此 SVN 存储库中找到。ManageData 类调用导出功能。

http://totsp.com/svn/repo/AndroidExamples/trunk/

你需要创建一个应用程序类,它公开了数据库,并在AndroidManifest.xml文件中被引用为应用程序名称。然后将该数据库用作DataXmlExporter构造函数的参数。
这是我使用的应用程序类。您可能已经有一个类(可能不叫做DatabaseHelper),它扩展了SQLiteOpenHelper
package com.billybobbain.android.someapp;
import android.app.Application;
import android.util.Log;

public class MyApplication extends Application {

   public static final String APP_NAME = "SomeApp";  

   private DatabaseHelper dataHelper;   

   @Override
   public void onCreate() {
      super.onCreate();
      Log.d(APP_NAME, "APPLICATION onCreate");
      this.dataHelper = new DatabaseHelper(this);      
   }

   @Override
   public void onTerminate() {
      Log.d(APP_NAME, "APPLICATION onTerminate");      
      super.onTerminate();      
   }

   public DatabaseHelper getDataHelper() {
      return this.dataHelper;
   }

   public void setDataHelper(DatabaseHelper dataHelper) {
      this.dataHelper = dataHelper;
   }
}

如何调用这个类? - jcrowson
谢谢您提供的详细信息,韦恩。我还有一个问题,如果我想在用户按下“发送数据库”按钮时导出数据库,我应该将按钮映射到启动 MyApplication 类还是 XMLExport 类的意图? - jcrowson
上面链接的 Android 示例恰好能够满足你的需求。你只需要将代码添加到你的应用程序中,稍微更改一下文件名,将 intent 添加到清单中,就可以开始使用了。它具有备份数据库按钮和导出 XML 按钮等功能。 - Billy Bob Bain
谢谢您的回复,韦恩。我想我的问题是,如果我只想包含导出XML部分,那么我需要添加上面示例中的多少内容到我的现有代码中。据我所知,我需要上面的"MyApplication"类,但是由于它不扩展Activity,我该如何在意图中启动它呢?我有点困惑,不确定我需要哪些部分。谢谢。 - jcrowson
@BillyBobBain,您能否检查一下上面的链接?它们现在无法打开。非常感谢。 - Yoo
@Billy Bob Bain:你好,请问能否检查一下链接,因为它们无法使用,而我想要实现这段代码。谢谢! - George

2
请看这里的源代码在安卓中将sqlite数据库导出到SD卡上的XML文件。我唯一需要做的更改(为了避免一些Eclipse警告)是在exportData()方法中关闭游标。为了使代码更具可移植性,我还将XML文件和位置作为参数传递而不是声明为最终字段。该代码将XML文件写入SD卡。现在,在他的博客上列出源代码的@mmaitlen没有添加任何功能来测试外部存储单元的存在性。所以这留给你去做。但是,您可以嵌入一些简单的代码来测试可写内存卡的存在性,使用以下片段(未经测试):
    sdOkToWrite = false;
    String sdTest = Environment.getExternalStorageState();
    if (sdTest.equals(Environment.MEDIA_MOUNTED)) {
        sdOkToWrite = true;
    } else {
    // Here's where you can code what to do without the external storage
    }

如果您需要创建的文件可能超出内部容量,那么测试外部存储器是非常有用的。


1
我发现这非常有帮助:

http://www.phonesdevelopers.com/1788273/

使用以下方式将其导出到SD卡:

File sd = Environment.getExternalStorageDirectory();
String path = sd + "/" + DB_NAME + ".xml";

DatabaseDump databaseDump = new DatabaseDump(mySQLiteOpenHelperObject.getReadableDatabase(), path);
databaseDump.exportData();

当然不要忘记:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接