由于某种原因,当我重新启动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 DATABASE_NAME = "locationBase.db";
private int mNumberOfElements = 0;
public LocationBaseHelper(Context context) {
super(context, DATABASE_NAME, 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;}
}
答案 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);