2016-07-12 5 views
0

データベースにバージョン管理を少し追加していますので、矛盾した状態のテーブルがあります。私は、Javaで列が追加されたテーブルを持っていますが、すべてのテーブルがこの時点でその列を持つとは限りません。SQLite用のSQLスクリプトファイルでALTER TABLEを避けるにはどうすればよいですか

私がやっていたことは、プログラムが最初に実行され、列が存在するかどうかをチェックし、存在しない場合は追加することでした。

バージョン管理に使用しているライブラリ(flyway.org)は、データベースをセットアップするために.sqlファイルを使用しています。多くのテーブルでは、これは簡単ですが、私は単にCREATE TABLE FOR EXISTS XXXというSQLファイルを持っています。これは簡単に処理できることを意味します。

これらの変更テーブルを処理する方法がSQLiteにないと思っていない場合、またはそれを行う方法がわからない場合は、私は不思議です。

私は列が存在しない場合には列を追加するコマンドがあるかどうかを調べようとしましたが、存在しないように見えました。私はsqliteのエラーを処理する方法を見つけようとしました。たとえば、alter tableを実行していて、エラーを無視していましたが、これを行う方法がないようです(私が知る限り)。誰にも何か提案はありますか?可能であれば、.sqlスクリプトでは100%解決策が必要です。

+0

このような柔軟性を実現するには、動的SQLを使用する必要があります。 ALTER TABLEステートメントは、動的SQLの内部にあります。 –

+0

[SQLiteに存在しない場合は、ALTER TABLE ADD COLUMN](http://stackoverflow.com/questions/3604310/alter-table-add-column-if-not-exists-in-sqlite)見たことがありますか? – Feneric

+0

@Feneric、私はそれを見ましたが、それはただのSQL文で解決策を提供しません。彼らはバージョン管理(これは私がやろうとしていることです)を勧めていて、あなたがpython/etcでそれを行うことができると言っています。 – Jdban101

答えて

2

SQLiteの変更テーブルには「IF NOT EXIST」句はありませんが、存在しません。

PRAGMA table_info(table_name);でテーブルに含まれる列のデータベースを調べる方法があります。しかし、その情報を100%SQLの方法で取得し、それをAlter Tableステートメントに適用する方法はありません。

多分1日ですが、今日はありません。

関連する問題