Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序不会将数据保存在本地sql数据库中以进行永久性备份_Android_Sqlite_Sdk - Fatal编程技术网

Android应用程序不会将数据保存在本地sql数据库中以进行永久性备份

Android应用程序不会将数据保存在本地sql数据库中以进行永久性备份,android,sqlite,sdk,Android,Sqlite,Sdk,我在本地SQL数据库文件中保存数据时遇到问题。我使用Cars.db文件,其中有两个表,car和favorities。当用户选择将汽车添加到收藏夹时,它会将汽车添加到收藏夹,但当我关闭应用程序并再次打开它时,应用程序在收藏夹表中没有任何数据 代码可以查看收藏夹中的汽车列表,我可以从列表中选择任何汽车来查看汽车的详细信息。我在主活动中将MyDBHandler类对象初始化为静态对象,并使用该对象引用从Cars.db文件插入和查询数据 public class MyDbHandler extends S

我在本地SQL数据库文件中保存数据时遇到问题。我使用Cars.db文件,其中有两个表,car和favorities。当用户选择将汽车添加到收藏夹时,它会将汽车添加到收藏夹,但当我关闭应用程序并再次打开它时,应用程序在收藏夹表中没有任何数据

代码可以查看收藏夹中的汽车列表,我可以从列表中选择任何汽车来查看汽车的详细信息。我在主活动中将MyDBHandler类对象初始化为静态对象,并使用该对象引用从Cars.db文件插入和查询数据

public class MyDbHandler extends SQLiteOpenHelper {
    private static final String DB_Name = "Cars.db";
    private static final String TABLE_Cars = "Cars";
    private static final String Table_Favourite = "Favourite_Cars";

    private static final int DATABASE_VERSION = 1;

    private SQLiteDatabase database;

    public MyDbHandler(Context context) {
        super(context, DB_Name, null, DATABASE_VERSION);

        try {
            copyDataBase(context); //Copies databse file to phones data/data/... folder

            database = this.getWritableDatabase();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

private void copyDataBase(Context context) throws IOException {

    InputStream dbInput = context.getAssets().open(DB_Name);

    // Creates databases folder if it does not exist
    String destPath = "/data/data/" + context.getPackageName() + "/databases/";

    File destPathFile =  new File(destPath);
    if (!destPathFile.exists())
        destPathFile.mkdirs();

    String outFile = destPath + DB_Name;
    OutputStream dbOutput = new FileOutputStream(outFile);

    byte[] buffer = new byte[1024];
    int length;
    while ((length = dbInput.read(buffer))>0) {
        dbOutput.write(buffer,0,length);
    }

    dbOutput.flush();
    dbOutput.close();
    dbInput.close();

}
}

每次启动应用程序时,都会复制旧数据库。所以你的应用程序会话每次都会被重写。应用if条件检查数据库是否已存在。如果否,那么只将db文件复制到内存中。我不这么认为。再次检查问题代码。我添加了copyDatabase函数。destPath应该是这个,以避免覆盖数据库文件字符串destPath=/data/data/+context.getPackageName+/databases/+db\u Name@nikhil.thakkar ohh,我现在看到了,我正在检查目录是否存在,如果它不存在,那么就创建一个,但我总是复制文件。谢谢你指出这一点。每次你启动应用程序时,你的旧数据库都会被复制。所以你的应用程序会话每次都会被重写。应用if条件检查数据库是否已存在。如果否,那么只将db文件复制到内存中。我不这么认为。再次检查问题代码。我添加了copyDatabase函数。destPath应该是这个,以避免覆盖数据库文件字符串destPath=/data/data/+context.getPackageName+/databases/+db\u Name@nikhil.thakkar ohh,我现在看到了,我正在检查目录是否存在,如果它不存在,那么就创建一个,但我总是复制文件。谢谢你指出这一点。