2016-08-17 12 views
0

私はテーブルを持つデータベースを作成しました。私はそのデータベースにテーブルを動的に追加したいと思っています。データベースが既にアンドロイドで作成されている場合、データベースにテーブルを追加する方法は?

onOpen()メソッドは、データベースに既に存在する以前のテーブルも変更するので便利ではありません。

+0

rawQueryを使用します。 onOpen()以外の場所で「作成」のクエリを実行するだけで済みます。 https://www.sqlite.org/lang_createtable.html –

+0

Rawクエリを使用する(SQLiteDatabase myDB = null;) - (myDB = this.openOrCreateDatabase( "TheDatabaseName"、MODE_PRIVATE、null);) - (myDB.execSQL ( "myDB.close();) – Tasos

答えて

1

私はあなたがSQLiteデータベースを使用していると仮定します。その場合、実際の解決策はここに存在します:

Create new table in existing DB in separate SQLiteOpenHelper classです。

まず、このデータベース

private final static String DATABASE_NAME = "MainDB"; 
private static final int DATABASE_VERSION = 1; 

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

ために、現在のデータベースのバージョンを確認し、データベースのバージョン(DATABASE_VERSION)をインクリメントし、上に新しいテーブルのクエリを追加します。

は下に、そのポストからrmkrishnaの回答を参照してください次のようなアップグレードとoncreateメソッド。

@Override 
public void onCreate(SQLiteDatabase db) { 
     db.execSQL("old query no need to change"); 
     db.execSQL("Create your new table here"); 
} 


@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    if (oldVersion < 2) { 
     db.execSQL("Create your new table here as well this for update the old DB"); 
    } 
} 
+0

if文の代わりに偉大な答えが、私は示唆しているだろう("テーブルが存在しない場合、テーブル名が存在しない場合、テーブル名を作成します(ID INTEGER PRIMARY KEY AUTOINCREMENT、columna TEXT、columnb TEXT);)増分更新を可能にするswitch文を使用します。 – Waves

+0

前のテーブルの値が削除されました – user3807098

+0

バージョン番号を増やしましたか? また、コードやデータベースバージョンを提供していないので、タグを見るので、SQLiteだと分かっていますが、それは私が知っているすべてのものなので、この時点で多くのことを推測する必要があります。次のリンクを確認して、別の回答を確認することもできます: http://stackoverflow.com/questions/9804083/how-to-add-second-table-in-database-in-sqlite –

関連する問題