0

私はおそらく単純な解決策を持っている単純な問題を抱えていますが、解決策は私をほのめかします...それで私は単純なテーブル、つまり4列の電話を持っています、そして私は1つの新しい列を追加したいと思います。SQLiteはテーブルを変更しないので、ドロップして作成する必要があります。

phone_old

_id整数主キーの自動インクリメント、
名前のテキストはnullではなく、
値のテキスト

電話

_id整数主キーの自動インクリメント、
名前テキストがnullでない、
itemStateテキストがnullでない、
値テキスト

したがって、次のようにします。1.古いテーブルの名前を変更します。2。追加のフィールド(私の場合はitemState)を使用して新しいテーブルを作成します。3。itemstateのデフォルト値を定義するすべてを選択して挿入します。

1 ALTER TABLE Phone RENAME TO Phone_OLD;

2 CREATE table Phone(
_id integer primary key autoincrement, 
name text not null, 
itemState text not null, 
value text ); 

3) INSERT INTO Phone SELECT * , 'Synced' as itemState from Phone_OLD where Phone_OLD. ;

その結果、アイテムの状態(同期済み)が最後のフィールドとして追加され、itemStateである列3には追加されません。

したがって、列名は行の値に対応していません。つまり、itemstateが最後に追加されます(行の最後の列として追加され、3番目の列としては追加されません)。

itemstateを最後に置くだけで問題は解決しますが、テーブル作成ステートメントが生成されるため、コード全体を書き直す必要があります。正直に言うと、この一連のクエリががらくたを返すことに腹を立てます。 。

何か案は?

4

1 に答える 1

1

Sqliteは列の追加をサポートしています

 ALTER TABLE Phone ADD COLUMN [itemState] text not null default ''
于 2012-10-16T12:39:51.017 に答える