4

だから私は市場に出回っているアプリを持っており、アップデートでいくつかの列をデータベースに追加したいと考えています。これまでのところ問題はありません。しかし、使用中のデータベースにこれらの列が欠落しているかどうかを検出し、欠落している場合は追加したいと考えています。アプリケーションは古いデータベースをインポートできるはずなので、これは新しいバージョンへの更新直後ではなく、動的に行う必要があります。通常はPRAGMAクエリを使用できますが、Android でこれを行う方法がわかりません。クエリであるため、execSQL を使用できません。PRAGMA を query() 関数で使用する方法がわかりません。

もちろん、例外をキャッチしてから列を追加するか、作業を開始する前に常に各テーブルに列を追加することもできますが、それは適切な解決策ではありません。

乾杯、

4

4 に答える 4

12

プラグマは動作します。例として、Android アプリ DB の 1 つで試してみました。

sqlite> pragma table_info (userCommand);

cid name        type    notnull     dflt_value  pk
0   id      INTEGER     0       1
1   description TEXT    0       0
2   message     TEXT    0       0

ご覧のとおり、指定されたテーブルには 3 つのフィールドがあります。ID、説明、およびメッセージ。

したがって、アプリでは、次のようなものを使用します。

Cursor c = null;
c = RawQuery ("pragma table_info (userCommand)",null); 
// if c has records and is not null then iterate through the records in search of your table name. 

フォーマットが悪いことをお許しください。

于 2010-04-20T14:21:30.300 に答える
3

の代わりにPRAGMAwithを使用してみてください。rawQuery()query()

于 2010-04-20T14:02:02.827 に答える
3

これはやり過ぎかもしれませんが、テーブルから単一の行を選択して Cursor に入れ、Cursor.getColumnIndex([文字列としての列名]) を使用できます。存在しない場合は -1 を返します。

于 2010-04-20T13:45:59.897 に答える
0

次のコマンドを発行して結果を調べ、列がリストされているかどうかを確認できます。

pragma table_info(table_name);

編集: Androidでこれを行ったことはありませんが、うまくいくと思います

于 2010-04-20T13:39:54.563 に答える