2016-11-10 19 views
0

何らかの理由で、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 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;} 
} 
+0

「mNumberOfElements」のサイズをチェックすると、フィールド値はデフォルト値から始まります。データベーステーブルの行数をカウントするには、 'COUNT(*)'クエリを使用します。 – laalto

+0

あなたはそうだ、私はそれが削除されていないと思う。私は 'Cursor cursor = db.rawQuery(" SELECT COUNT(*)FROM "+ LocationTable.NAME、null)のようなことをします。 @laalto – Developer

+0

はい、効率的にテーブルの行数をカウントする方法の1つになります。 – laalto

答えて

1

私は、データベースのサイズに私が追加するたびにテストするので、私はそれが実際にデータベースに追加されていることを知っています。その後、あなたのヘルパーのコース別のインスタンスを

private int mNumberOfElements = 0; 

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

... 

public int size(){return mNumberOfElements;} 
} 

:私は再起動してサイズを確認すると、それはによる場合は、このようなものを意味し、「サイズを確認し、」0再び

ですフィールドがデフォルト値に初期化されると、0からの挿入のカウントが再び開始されます。

データベーステーブルの要素数をカウントするには、COUNT(*)クエリを実行します。例:

​​
関連する問題