2011-01-28 11 views
0

私はNotepadv#チュートリアルを終えました。そして、私はコンソール(adbシェル)の 'データ'ファイルのNotepadv3チュートリアルに接続します。私は何かを試した。誰も "DROP TABLE notes;" Android Notepadv3チュートリアルで?

  1. ノートテーブルを削除して再実行します。
    • 作業しないでください。
  2. データファイル(dbファイル)を削除して再実行します。
    • Work。

あなたはNotepadvの#のチュートリアルを働いた場合は、NotesDbAdapterクラスのいくつかの前処理について知っているかもしれません。そのコード位置で、コンストラクタで "dbを選択"、onUpgradeメソッドで "onCreateメソッドでテーブルを作成"、 "テーブルを更新"が見つかりました。

データベース(ファイルという名前のファイル)は、onCreateがコンストラクターの後に呼び出されたときにテーブルを作成します。それはうまくいかなかった。そのナンセンスに起因する2つの馬鹿のようなテストの上。誰もコンソール上にノートテーブルをドロップしますか?私は作成がうまくいかない理由を見つけることができません。

ps - 愚かな英語については申し訳ありません。

答えて

3

データベースonCreateメソッドは、データベースが存在しない場合にのみ作成します。破損している(つまりNotesテーブルを削除した)か、存在していても空ですが、それを検出して回復するのはアプリケーションの責任です。

これは、テーブルを削除すると(データベースが存在するためonCreateが呼び出されず、データベースが破損している)、メモ帳の例が失敗しますが、データベースを削除するとonCreateが呼び出され、データベース。そこで、基本的

は、より詳細な説明については SQLiteOpenHelperのマニュアルを参照してください:-)

をしません。

+0

おそらく私はあなたが言ったようにSQLiteOpenHelperのonCreateをもっと詳細に見る必要があります。ありがとう。 – Gioskhan

+0

あなたの助言によると、私は私の質問のようにdbにアクセスしてはなりません。しかし、コンストラクタが呼び出されたときにonCreateを呼び出すと、解決策を得ることができます。 DATABASE_CREATEに "IF NOT EXISTS"というクエリを追加してから、コンストラクタでonCreateを呼び出しました。それはとてもうまくいった!基本的には、私はアプリケーションを実行しているときにコンソール経由でテーブルをドロップしてはいけませんが、私は上記のほんの少しの作業でこのバカな疑問を解決します。 Thx再びすべて。 – Gioskhan

+0

絶対に正しい - アプリケーションの外でデータベースを修正することは、潜在的に悪い考えです。しかし、必要に応じてアンドロイドに 'onCreate()'を呼び出させ、必要に応じてスキーマを修正する別の 'checkDBIntegrity()'関数を持たせることをお勧めします。これはあなたの 'onCreate'を単純に保ち、それが意図している仕事をし、プログラムの流れが明確になるのであなたのアプリはより保守的になります。 – RivieraKid

0

アプリケーションをアンインストールするか、設定 - >アプリケーションの管理からアプリケーションデータを削除しようとしましたか?

+1

同じです。2.データファイル(dbファイル)を削除して再実行してください。ではない? – Gioskhan

関連する問題