2017-10-13 18 views
1

我是SQLite數據庫中的新成員。我目前創建了一個數據庫,但我的幫助類中有兩個錯誤,它們是DATABASE_NAME常量和DATABASE_VERSION常量的構造函數。 錯誤說:在超類型構造函數被調用之前不能引用PetDbHelper.DATABASE_NAME。 我有相同的錯誤DATABASE_VERSION常量。 PetDbHelper.java:在SQLite幫助程序類中存在問題

public class PetDbHelper extends SQLiteOpenHelper { 

    private final String DATABASE_NAME = "shelter.db"; 
    private final int DATABASE_VERSION = 1; 


    public PetDbHelper(Context context){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String SQL_CREATE_PETS_TABLE = "CRAETE TABLE" + PET_ENTRY.TABLE_NAME + "(" + PET_ENTRY._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," 
      + PET_ENTRY.NAME + "TEXT NOT NULL," + PET_ENTRY.BREED + "TEXT," + PET_ENTRY.GENDER + "INTEGER NOT NULL," 
      + PET_ENTRY.WEIGHT + "INTEGER NOT NULL DEFAULT 0);"; 
     sqLiteDatabase.execSQL(SQL_CREATE_PETS_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    } 
} 
+0

使靜態DATABASE_NAME,DATABASE_VERSION –

+0

我意識到,我的有關調用回答'super'方法並不適用於這個問題,但你會需要調用'super.onCreate(sqLiteDatabase)'和'super.onUpgrade(sqliteDatabase,i,i1);'來防止不同的崩潰。 –

+0

好的,謝謝@MichaelDodd –

回答

3

此變量不能被引用直到父構造函數被初始化。將此變量添加到static修飾符時,不會報告更多錯誤。

變化

private final String DATABASE_NAME = "shelter.db"; 
private final int DATABASE_VERSION = 1; 

private static final String DATABASE_NAME = "shelter.db"; 
private static final int DATABASE_VERSION = 1; 
+0

它可以工作,但爲什麼我應該這樣做? –

+0

因爲你的錯誤是'在調用超類型構造函數之前不能引用PetDbHelper.DATABASE_NAME''。 – KeLiuyue

+0

它與Java的初始化序列相關聯。 – KeLiuyue