重启应用程序后删除SQLite DB

时间:2016-11-10 03:56:18

标签: java android database sqlite

由于某种原因,当我重新启动Android应用程序时,我之前创建的数据库已经消失。我的帮助程序类如下所示。我在一个单独的片段中创建了一个helper类的实例,只从片段中调用以下函数:

helper = new LocationBaseHelper(getActivity());
helper.insertEntry(blah blah);

如果重要,我在" onCreateView()"中创建数据库。片段类。我每次添加时都会测试数据库的大小,所以我知道它确实在添加到数据库中。当我重新启动并检查大小时,它再次为0。这是我的助手班。

//编辑

如果有人可以解释SQLite DB在Android上的行为方式,那也会有所帮助。如果我多次调用辅助构造函数,是否会创建多个DB?它们会覆盖以前的吗?如果我从不同的片段/活动/服务中调用它会怎么样?谢谢。

public class LocationBaseHelper extends SQLiteOpenHelper {

private static final int VERSION = 1;
private static final String D​A​T​A​B​A​S​E​_​N​A​M​E​ = "locationBase.db";
private int mNumberOfElements = 0;

public LocationBaseHelper(Context context) {
    super(context, D​A​T​A​B​A​S​E​_​N​A​M​E​, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + LocationTable.NAME + " (" +
            LocationTable.Cols.DATE_TIME + " text, " +
            LocationTable.Cols.LATITUDE + " text, " +
            LocationTable.Cols.LONGITUDE + " text )"
    );
}

// do nothing
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

public void insertEntry(String date_time, String latitude, String longitude){
    mNumberOfElements++;
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues content = new ContentValues();
    content.put(LocationTable.Cols.DATE_TIME,date_time);
    content.put(LocationTable.Cols.LATITUDE,latitude);
    content.put(LocationTable.Cols.LONGITUDE,longitude);
    db.insert(LocationTable.NAME,null,content);
}

public ArrayList<String> getEntireDatabase(){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM " + LocationTable.NAME,null);
    cursor.moveToFirst();

    ArrayList<String> values = new ArrayList<>();

    do{
        String value = (String) cursor.getString(cursor.getColumnIndex(LocationTable.Cols.DATE_TIME)) + " " +
                (String) cursor.getString(cursor.getColumnIndex(LocationTable.Cols.LATITUDE)) + " " +
                (String) cursor.getString(cursor.getColumnIndex(LocationTable.Cols.LONGITUDE));
        values.add(0,value);

    }while(cursor.moveToNext());

    return values;
}

public int size(){return mNumberOfElements;}
}

1 个答案:

答案 0 :(得分:1)

  

我每次添加时都会测试数据库的大小,所以我知道它确实在添加到数据库中。当我重新启动并检查大小时,它再次为0

如果通过“检查尺寸”来表示这个东西:

private int mNumberOfElements = 0;

public void insertEntry(String date_time, String latitude, String longitude){
    mNumberOfElements++;

...

public int size(){return mNumberOfElements;}
}

当然,当字段初始化为默认值时,助手的另一个实例会再次从0开始计数插入。

要计算数据库表中的元素数,请执行COUNT(*)查询。例如:

SQLiteDatabase db = getReadableDatabase();
long numberOfRows = DatabaseUtils.longForQuery(db, "SELECT COUNT(*) FROM " + LocationTable.NAME, null);