Android应用程序不会将数据保存在本地sql数据库中以进行永久性备份
我在本地SQL数据库文件中保存数据时遇到问题。我使用Cars.db文件,其中有两个表,car和favorities。当用户选择将汽车添加到收藏夹时,它会将汽车添加到收藏夹,但当我关闭应用程序并再次打开它时,应用程序在收藏夹表中没有任何数据 代码可以查看收藏夹中的汽车列表,我可以从列表中选择任何汽车来查看汽车的详细信息。我在主活动中将MyDBHandler类对象初始化为静态对象,并使用该对象引用从Cars.db文件插入和查询数据Android应用程序不会将数据保存在本地sql数据库中以进行永久性备份,android,sqlite,sdk,Android,Sqlite,Sdk,我在本地SQL数据库文件中保存数据时遇到问题。我使用Cars.db文件,其中有两个表,car和favorities。当用户选择将汽车添加到收藏夹时,它会将汽车添加到收藏夹,但当我关闭应用程序并再次打开它时,应用程序在收藏夹表中没有任何数据 代码可以查看收藏夹中的汽车列表,我可以从列表中选择任何汽车来查看汽车的详细信息。我在主活动中将MyDBHandler类对象初始化为静态对象,并使用该对象引用从Cars.db文件插入和查询数据 public class MyDbHandler extends S
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,我现在看到了,我正在检查目录是否存在,如果它不存在,那么就创建一个,但我总是复制文件。谢谢你指出这一点。