2016-11-10 103 views
0

由於某些原因,當我重新啓動我的Android應用程序時,我以前創建的數據庫已經消失。下面顯示了我的助手類。我在一個單獨的片段創建helper類的實例,只能從片段調用了以下功能:重新啓動應用程序後刪除SQLite數據庫

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

如果它的事項,我創建的「onCreateView()」片段類數據庫。我每次添加時都會測試數據庫的大小,所以我知道它確實會添加到數據庫中。當我重新啓動並檢查大小時,它再次爲0。這是我的助手類。

//編輯

如果有人可以解釋如何DB的SQLite的Android上的表現,這也將幫助。如果我多次調用助手構造函數,是否創建了多個數據庫?他們覆蓋以前的?如果我從不同的片段/活動/服務中調用它,該怎麼辦?謝謝。

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

是的,這將有效地計算表中的行數。 – laalto

回答

1

我測試每次我添加了數據庫的大小,所以我知道它確實添加到數據庫中。當我重新啓動,並檢查大小,它是0再次

如果「檢查大小」你的意思是這個東西:

private int mNumberOfElements = 0; 

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

... 

public int size(){return mNumberOfElements;} 
} 

那當然了助手的另一個實例當字段被初始化爲其默認值時,再次從0開始計數插入。

要計算數據庫表中元素的數量,請執行COUNT(*)查詢。例如:

​​
相關問題