【发布时间】:2019-07-17 04:48:42
【问题描述】:
在以编程方式删除包含数据库的文件夹后,当下次调用插入查询时,它返回-1。我认为解决方案是通过调用数据库构造函数再次创建数据库。但我不知道如何在片段中执行此操作。
数据库类:
public class SQliteHelperClass extends SQLiteOpenHelper {
public static final String Dabase_name= "UserRecord.db";
public static final String Table_name= "RTable";
public static final String col_0= "Id";
public static final String col_1= "KM";
public static final String col_2= "MDATE";
public static final String col_3= "MTIME";
public static final String col_4= "MDIFFER";
public SQliteHelperClass(Context context) {
super(context, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ File.separator+"MyCarData"
+ File.separator + Dabase_name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+ Table_name +"(Id INTEGER PRIMARY KEY AUTOINCREMENT, KM INTEGER, MDATE TEXT, MTIME TEXT , MDIFFER INTEGER) ");
}
public boolean insertData(KmDataModel kmDataModel) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(col_0,kmDataModel.getId());
contentValues.put(col_1,kmDataModel.getKm());
contentValues.put(col_2,kmDataModel.getDate());
contentValues.put(col_3,kmDataModel.getTime());
contentValues.put(col_4,kmDataModel.getDffKm());
long result =db.insert(Table_name,null,contentValues);
if(result == -1){
return false;
}else{
return true;
}
}
}
调用删除特定文件夹的包含的删除方法:
public void DeleteDataFolder(){
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ File.separator+"MyCarData"
+ File.separator);
if (dir.isDirectory())
{
String[] children = dir.list();
for (int i = 0; i < children.length; i++)
{
Log.e("File_List",children[i]);
new File(dir, children[i]).delete();
}
}
}
请注意,如果我关闭应用程序并再次启动它,那么数据库工作正常,所以我正在调用强制应用程序关闭但我不想关闭应用程序的方法。
【问题讨论】:
-
这是意料之中的。您正在删除数据库文件。如果执行失败,Insert 将返回 -1,这应该发生在这里,因为文件不存在。
-
我可以理解,但是在插入数据之前我该怎么做才能再次创建数据库
-
理想情况下,您不应该删除数据库文件,如果您真的想这样做,请确保在插入之前检查表是否存在。如果表不存在,则创建它,然后继续插入。
-
boolean tableExists(SQLiteDatabase db, final String tableName) { Cursor cursor = null;尝试 { cursor = db.rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '" + tableName + "'", null); return (cursor != null && cursor.getCount() > 0); } 最后 { if (null != cursor) { cursor.close(); } } }
-
使用able sn -p 检查表是否存在
标签: android sqlite android-fragments