我正在使用DatabaseHelper類來加載SQLite數據庫。如果它不存在,它會創建它。用於創建數據庫的XML文件位於SD卡上的特定文件夾中。刷新SQL數據庫
我想通過菜單從XML文件中重新安裝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);
}
}
也許如果你叫活動再次比這也是可能的。 – 2011-05-11 10:07:27
由於數據庫幫助程序發現數據庫已存在,所以不起作用。 – mikeciz 2011-05-13 09:19:48