刷新SQL数据库

时间:2011-05-11 10:02:46

标签: android sql

我正在使用DatabaseHelper类来加载SQLite数据库。如果它还不存在,它将创建它。用于创建数据库的XML文件位于SD卡上的特定文件夹中。

我想通过菜单从XML文件RELOAD sql数据库。我有菜单设置,但似乎无法找到重新加载SQL的方法。是否有一种简单的方法可以执行此操作,而无需卸载应用程序并重新安装,从而删除/重新创建数据库。

这是我的DatabaseHelper中的代码:

package samples.myApp;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "projectDocuments";

    protected Context context;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String s;
        try {
            Toast.makeText(context, "Database Created", 2000).show();
            // Old database loaded from res
            //InputStream in = context.getResources().openRawResource(R.raw.sql);
            // Load from sdcard
            InputStream in = new FileInputStream("/sdcard/ContractHound/sql.xml");

            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(in, null);
            NodeList statements = doc.getElementsByTagName("statement");
            for (int i=0; i<statements.getLength(); i++) {
                s = statements.item(i).getChildNodes().item(0).getNodeValue();
                db.execSQL(s);
            }
        } catch (Throwable t) {
            Toast.makeText(context, t.toString(), 90000).show();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS documents");
        onCreate(db);
    }   
}

1 个答案:

答案 0 :(得分:0)

您的意思是想要调用onUpgrade吗?如果是这样,您可以在构造函数

中增加db版本
super(context, DATABASE_NAME, null, 2);

或以编程方式

getWritableDatabase().setVersion(2);

<强>被修改

DatabaseHelper dbHelper = new DatabaseHelper();
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.setVersion(db.getVersion()+1);

这样的事情。但是,除了通过硬编码之外,我从未增加db版本 并且不要忘记通过拨打dbonStop来关闭db.close()或其他地方的dbHelper.close()
还有方法needUpgrade (int newVersion)没有javadoc,你可以尝试使用它。