2012-11-05 3 views
5

データベースで構成されるアンドロイドアプリを開発しました。モバイルにインストールすると、初めて正常に動作します。以前にインストールしたバージョンをアンインストールせずにデータベースを変更してもう一度インストールするとクラッシュします。データベースに何らかの変更を加えたときにAndroidアプリがクラッシュする

注:私は以前に格納されたデータ

任意の提案の友人を維持したいので、私は私の以前のバージョンをアンインストールしたくないですか?

+0

antカラム名を作成または変更するとクラッシュするので、アプリをアンインストールして新しいアプリをインストールすると思います –

+0

私は以前のデータを失いたくありません。 – Govind

答えて

0

カラムを追加するなどの変更を行った場合は、完全アンインストールまたはデータベースバージョンのアップグレードが必要です。あなたは、データベースの構造を変更したとき1で、データベースのバージョン番号を増やし

+0

データベースのバージョンを増やす方法を教えてください。 – Govind

+0

私たちが助けることができるようにいくつかのコードを投稿してください – tyczj

+1

実際に私はcode.I経由でデータベースを作成していません、私はSqliteブラウザを使用して作成したデータベースに接続しています。 db = thisを使用してコードで接続します。openOrCreateDatabase(DB_NAME、MODE_PRIVATE、null); 文字列selectQuery = "SELECT COUNT(*)FROM" + TABLE_TRIP; カーソルc = db.rawQuery(selectQuery、null); – Govind

2

でそれを格納するための一時データベースを作成することにより、第1のデータのバックアップを作成しない限り、

いずれかの方法あなたは、テーブル内のすべてのデータが失われます。 (つまり、新しい列の追加、既存の列の削除、列のデータ型の変更、列名の変更など)。

あなたのdbヘルパークラスのonUpgrade()メソッドの中に2行下に置いてください。

db.execSQL("DROP TABLE IF EXISTS your_table_name_goes_here"); 
onCreate(db); 

毎回データベースの現在のバージョン番号をチェックします。現在のデータベースバージョンとそれ以前のバージョンとの間に不一致がある場合は、onUpgrade()メソッドを実行してデータベースをアップグレードするだけです。そこで、すべてのテーブルを削除して、新しいテーブルを再度作成します。 これで、dbの操作中に 'n'個のカラムを追加/削除できるようになりました。あなたがしなければならないのは、バージョン番号を1だけ増やし、db構造を変更するときに実行するだけです。あなたはおそらく、これらのcontructorsかのいずれかを使用するデータベースを作成するとき

+0

これを行うことで、以前の店舗データが失われます。それはありませんか? – Govind

+0

はい。以前のデータは失われます。私はアプリを開発している間に以前のデータを失うことは大きな問題だとは思わない。 – Santhosh

+1

実際に私のアプリは起動準備完了です。データベースを変更してから問題が発生すると起動します – Govind

2

:あなたが見ることができるように、変数dbVersionあり

public TimePointsSQLiteHelper(Context context, String name, 
          CursorFactory factory, int version) { 
    super(context, dbName, factory, dbVersion); 
} 

private TimePointsSQLiteHelper(Context context) { 
    super(context, dbName, null, dbVersion); 
} 

を、これはあなたが避けるために、データベースのバージョンを示すものですあなたが持っている問題。あなたが簡単に変更できるように、あなたのデータベースのバージョン/番号を古いものにするために最終的な静的int変数を使用することをお勧めします。 例えば:

public final static int dbVersion = 1; 

次に、あなたの現在のアプリケーションやデータへの変更を適用するためにonUpgrade(...)および/またはonDowngrade(...)をoverrite必要があります。

それを行うための最も簡単かつ最速の方法だけですべてのテーブルをドロップし、それらを再度作成し、言及した1 @SANTHOSHです:

db.execSQL("DROP TABLE IF EXISTS your_table_name"); 
onCreate(db); 

は、このソリューションで、あなたの現在のデータが失われますことを注意してください保存あなたのデータベースに。 onUpgradeonDowngradeにロジックを追加して、データベースのあるバージョンから別のバージョンにデータを移行したい場合は、それを移行する必要があります。

関連する問題