我花了 10 多个小时试图让我的 sqlite 数据库导出到 sdcard 作为备份,然后将信息导入回我的应用程序。我已经搜索了所有可以尝试解决的主题,而无需提出任何问题,但现在我已经用完了有用的信息。我似乎非常接近完成这个......这就是我的位置:我正在关注这个基本示例http://androidgenuine.com/?tag=importexport-android-database. 一切似乎都很好,我可以看到我用备份文件创建的文件夹,如果我以文本形式打开文件,我可以看到它正在从我的数据库中保存我的信息。然后我将保存的文件导入回我的应用程序,一切似乎也很顺利。问题是我从备份加载的新信息没有显示在我的应用程序中,它仍然显示与导入前相同的数据。奇怪的是,如果我在导入数据库后导出它,导出文件是应该显示的正确数据,所以当我导入它时我显然得到了正确的数据,它只是没有显示,而是显示任何旧数据我在进口之前有。同样,它仍然有效,只是似乎没有刷新我的应用程序正在读取的数据。感谢您对此的任何帮助,我很难过。
这是我的进口
myOutput = new FileOutputStream("/data/data/my_project/databases/empdb.db");
// Set the folder on the SDcard
File directory = new File("/sdcard/CarMaintenanceBackup");
// Set the input file stream up:
InputStream myInputs = new FileInputStream(directory.getPath()+ "/empdb.backup");
// Transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = myInputs.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}
// Close and clear the streams
myOutput.flush();
myOutput.close();
myInputs.close();
} catch (FileNotFoundException e) {
Toast.makeText(mymenu.this, "Import Unsuccesfull!", Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) { Toast.makeText(mymenu.this, "Import Unsuccesfull!",
Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(mymenu.this, "Import Done Succesfully!", Toast.LENGTH_LONG).show();
编辑*我的 OpenHelper
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public OpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CARINFO_TABLE);
db.execSQL(HISTORY_TABLE);
db.execSQL(MPG_TABLE);
db.execSQL(MODS_TABLE);
db.execSQL(PICK_TABLE);
//UPDATE//
db.execSQL(VEHICLENAME_TABLE);
db.execSQL(ODOMETER_TABLE);
db.execSQL(COUNTER_TABLE);
db.execSQL(SETTIME5_TABLE);
db.execSQL(USORMETRIC_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg2 > arg1) {
db.execSQL(PICK_TABLE);
db.execSQL("ALTER TABLE Employees ADD COLUMN _datetask INTEGER DEFAULT 0");
}
}
}