何らかの理由で、Androidアプリを再起動すると、以前作成したデータベースがなくなりました。私のヘルパークラスは以下の通りです。私は別のフラグメントにヘルパークラスのインスタンスを作成し、断片のみから次の関数を呼び出します。再起動後にSQLite DBが削除されました
helper = new LocationBaseHelper(getActivity());
helper.insertEntry(blah blah);
それが重要ならば、私は「onCreateView()」フラグメントクラスでデータベースを作成します。追加するたびにデータベースのサイズをテストするので、実際にデータベースに追加されていることがわかります。再起動してサイズを確認すると、再び0になります。ここに私のヘルパークラスがあります。
誰かがAndroid上でどのように動作するかのSQLiteのDB説明できる場合は//編集
、それにも役立つだろう。ヘルパーコンストラクタを複数回呼び出すと、複数の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;}
}
「mNumberOfElements」のサイズをチェックすると、フィールド値はデフォルト値から始まります。データベーステーブルの行数をカウントするには、 'COUNT(*)'クエリを使用します。 – laalto
あなたはそうだ、私はそれが削除されていないと思う。私は 'Cursor cursor = db.rawQuery(" SELECT COUNT(*)FROM "+ LocationTable.NAME、null)のようなことをします。 @laalto – Developer
はい、効率的にテーブルの行数をカウントする方法の1つになります。 – laalto