1

我花了 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");
        }
    }
}
4

0 回答 0