2012-01-04 3 views
0

私はアンドロイドアプリの実行中にdatabaseとテーブルuserの1つを作成しました。android sqliteDatabase table recreation

問題は、最初にuserテーブルを作成したときに、作成するフィールドがpasswordで足りません。 フィールドを含むuserテーブルを再度作成するようにコードを書き直します。

しかし、問題は、私のDatabaseHelperクラス内にonCreateメソッドのコードを入れていたことです。

データベースが既に存在するため、関数onCreateは決して呼び出されません。

誰でもこの問題を解決する方法を教えてください。

答えて

2

を参照してください、そしてデータベースは意志でありますアプリケーションを再実行すると、削除して再作成することもできます。

onUpgradeなどを実装しなくても、アプリケーションが市場に出たとき/実際に使用されているときに、簡単かつ簡単に実装できます。

+0

ありがとう。私のために働いていた。 –

+1

はい、アプリケーションのすべてのユーザーにアプリケーションをアンインストールすることはできませんが、そうは思われません。あなたがまだ自分の電話機/エミュレータに抱かれているなら、この解決策はうまくいくでしょう。しかし、既にクライアントに配布されているアプリケーションでは、同じことをしないでください。 – Huds0nHawk

+0

これは、答えに記載されているonUpradeのものは、アプリケーションがすでに市場に出ているときです。最初のバージョンをまだ開発しているときは、onUpgradeメソッドを使用する方がやや愚かだと思います。あなたはすでにコードがリリースされる前にコードを維持するのに苦労しているでしょう。開発中は目的ができません。 –

2

いくつかの可能性が用意されています

  1. あなたは、ルートデバイス上のアクセスやエミュレータを使用している場合 - あなたはSQLiteデータベースを検索し、単にそれをドロップ(それが再作成されますのためにadb shellを使用することができます次回あなたのアプリが起動するとき)またはsqlite command line toolを使用して - 自分でテーブル構造を変更してください。もちろん、これは、開発中に何かを見逃してしまった場合にのみ適しています。既存のユーザーについては考えずにすばやくすばやく修正できます。

  2. は、アプリケーションのバージョン番号を増やし、あなたはすでに既存のデータベース上のすべての必要な変換を行うことができますonUpgradeメソッドを実装しています。これは、既存のユーザーとそのアプリケーションのインストールについて考えて、実際のアプリケーションのバージョンのアップグレードに使用する必要があります。データベース -

4

あなたはonUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法 DatabaseHelperクラス

デシベルを使用することができます。

oldVersion - 古いデータベースのバージョン。

newVersion - 新しいデータベースバージョン。

データベースをアップグレードする必要があるときに呼び出されます。実装は、このメソッドを使用してテーブルを削除したり、テーブルを追加したり、新しいスキーマバージョンにアップグレードするために必要な作業を行う必要があります。 SQLiteのALTER TABLEのマニュアルはhereです。新しい列を追加する場合は、ALTER TABLEを使用してそれらをライブテーブルに挿入できます。列の名前を変更または削除する場合は、ALTER TABLEを使用して古い表の名前を変更し、新しい表を作成して、新しい表に古い表の内容を移入できます。 パラメータ

0

adbシェルを使用してsqlite dbにアクセスするだけで、アプリが電話にインストールされている場合はrootアクセスが必要です。ここではいくつかreference - look for Examining sqlite3 Databases from a Remote Shell

その他の方法は、設定 - >アプリケーション - >アプリケーションの管理 - >あなたのアプリケーションからデータベースを削除し、クリアデータボタンを押すとSqliteデータベースと共有設定が削除されます。その後、正しいテーブルDDLを使用してアプリケーションを再実行すると、正しい定義でデータベースが作成されます。

プログラムでは、ヘルパーからonOpenをオーバーライドし、db.execSql()を使用してテーブル変更DDLを配置する必要があります。alter tableをそこに置くか、代わりにテーブルを先に落とし、正しい定義で新しいテーブルを作成します。ここ は、クラスがSQLiteOpenHelperSQLiteDatabase を参照しても簡単にオプションがちょうど設定メニューで、デバイス上のアプリケーションをアンインストールする(またはADB uninstallコマンドを使用)することであるhere

関連する問題