2017-06-30 47 views
0

我工作的一個Android應用程序,和我有一個類擴展SQLiteOpenHelper不與其onCreate聲明拋出一個錯誤,即使是在SQL沒有IF NOT EXISTS爲什麼不創建表爲先存表引發錯誤?

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE foo (columnName Text)"); 
} 

我可以實例化這個類儘可能多地添加數據,添加數據,操作數據,關閉數據,然後在下次打開我的應用程序時再回到數據庫。它從來沒有拋出一個合適的:

MyClass MyClass0 = new MyClass(this); 
SQLiteDatabase MyDatabase = MyClass0.getWritableDatabase(); 
ContentValues values = new ContentValues(); 
values.put("columnName","value0"); 
long newRowId = MyDatabase.insert("foo", null, values); 
Cursor cursor = MyDatabase.rawQuery("SELECT * FROM foo WHERE columnName = \"value0\"", null); 
cursor.moveToPosition(0); 
int rowcount = cursor.getCount(); 
Log.d("Database Testing",Integer.toString(rowcount)); 
MyDatabase.close(); 

我知道他們說不要把禮物馬在嘴裏,但我不明白爲什麼這個工程。

+0

這是因爲如果數據庫已經存在,則不會調用onCreate(),請參閱[post](https://stackoverflow.com/a/21881993/5015207) – 0X0nosugar

回答

0

這是擴展SQLiteOpenHelper的類的onCreate方法。它只被調用一次,以便創建一個或多個數據庫表(如果它們不存在)。值得注意的是,這只是在您第一次嘗試對數據庫執行操作(例如插入操作)時完成的。

@Override 
public void onCreate(SQLiteDatabase db) { 
} 

您會注意到它需要SQLiteDatabase作爲參數。

以下是活動的onCreate方法。每次Android系統實例化Activity類的新實例時都會調用它。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
} 

鑑於它們具有相同的名稱,因此對於Android新手來說,假設他們的行爲方式相同,這可能很容易。

相關問題