我正在使用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);
}
}
答案 0 :(得分:0)
您的意思是想要调用onUpgrade
吗?如果是这样,您可以在构造函数
super(context, DATABASE_NAME, null, 2);
或以编程方式
getWritableDatabase().setVersion(2);
<强>被修改强>
DatabaseHelper dbHelper = new DatabaseHelper();
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.setVersion(db.getVersion()+1);
这样的事情。但是,除了通过硬编码之外,我从未增加db版本
并且不要忘记通过拨打db
或onStop
来关闭db.close()
或其他地方的dbHelper.close()
。
还有方法needUpgrade (int newVersion)没有javadoc,你可以尝试使用它。