最近我一直在用SQLiteDatabase
和SQLiteOpenHelper
類練習很多,有些東西讓我很困惑。Android沒有寫入數據庫中的表 - 直到
我有此constructor
和onCreate()
方法:
public DataBaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String create_table = "CREATE TABLE " + MEASUREMENT_TYPE_TABLE +
"(" + idCol + " integer primary key autoincrement, " +
typeCol + " varchar(255) not null) ";
db.execSQL(create_table);
populateMeasurementTable();
}
該方法被稱爲在端部是如下:
public void populateMeasurementTable() {
SQLiteDatabase db = this.getWritableDatabase();
for(int i = 0; i < measurementType.length; i++) {
ContentValues values = new ContentValues();
values.put(typeCol, measurementType[i]);
db.insert(MEASUREMENT_TYPE_TABLE, null, values);
}
}
該方法的要點是填充所創建的表在onCreate()
方法。但是,當我在IntelliJ中訪問tools -> Android -> Monitor (DDMS included)
並查看數據庫文件時,它不包含表或任何數據(當然)。
measurementType
僅僅是正在通過迭代的數組:
private static final String[] measurementType = new String[] {"acceleration", "angles", "area", "astronomical",
"density", "energy", "force", "frequency", "length/distance", "power", "pressure", "speed",
"temperature", "torque", "volume", "weight"};
我試圖使參考所述數據庫是這樣的:
populateMeasurementTable(db);
和在該方法中除去該語句:
db = this.getWriteableDatabse();
我很肯定它會抱怨已經打開連接,否則。但它仍然沒有填充創建表或填充它。
活動中的onCreate()
方法是這樣的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DataBaseHandler handler = new DataBaseHandler(getApplicationContext());
}
沒什麼特別的,只是實例化處理類。我的理解是,在這一點上,onCreate()
方法將被調用,並且所有事情都會經過。
請記住,我沒有得到任何形式的SQLExceptions
或errors
。
所以,我想這不是活動的onCreate()
方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DataBaseHandler handler = new DataBaseHandler(getApplicationContext());
handler.populateMeasurementTable();
}
我從一個SQLite
瀏覽器中打開數據庫文件,而不是隻在那裏的表,但數據是在那裏以及.. 。
所以我的問題我想是在三個方面:
- 簡直是實例數據庫處理程序不足以援引其
onCreate()
方法?因爲這就是爲什麼沒有創建表以及未插入數據的原因? - 如果實例化足以調用該方法,那爲什麼它不創建表並使用數據填充它。
在我猜測,第一個問題的回答(如果是有道理的)
- 最後,對於第三個問題的那一刻,有我可以簡單的實例並有它的方式運行初始化方法?因爲這種填充方法是許多方法中的第一種,我不想在活動中調用它們,所以不覺得好的設計習慣正在進入。
完美謝謝。 – user2405469