2017-06-30 12 views
0

私はアンドロイドのアプリに取り組んでいる、と私はSQLにはIF NOT EXISTSはありませんにもかかわらず、そのonCreate文でエラーをスローしませんSQLiteOpenHelperを拡張するクラスを持っている:テーブルを作成しても既存テーブルのエラーが発生しないのはなぜですか?

@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メソッドです。存在しない場合は、データベーステーブルを作成するために1度だけ呼び出されます。これは、インサートのようなデータベース上での操作を初めて実行しようとするときにのみ行われることに注意してください。

@Override 
public void onCreate(SQLiteDatabase db) { 
} 

あなたはそれが引数としてSQLiteDatabaseを取ることがわかります。

アクティビティのonCreateメソッドを次に示します。これは、AndroidシステムがActivityクラスの新しいインスタンスをインスタンス化するたびに呼び出されます。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
} 

これらの名前が同じであるとすれば、Androidの新しいユーザーは同じように動作すると考えることが容易になります。

関連する問題