3

誰かが助けてくれSQLite databaseますandroidか?

まず、ここからチュートリアルを使用しています。私のアプリケーションではうまく機能しますが、新しい列を追加してdatabaseバージョンを「2」に変更すると、アプリケーションが停止し、ファイルエクスプローラーで見つかりませんdatabaseでした。誰もが問題と解決策を述べることができませんでした。

編集:ここに私の変更がいくつかあります..これは私のFirstClass.javaです

// Database creation SQL statement
  private static final String DATABASE_CREATE = "create table " 
      + TABLE_TODO
      + "(" 
      + COLUMN_ID + " integer primary key autoincrement, " 
      + COLUMN_CATEGORY + " text not null, " 
      + COLUMN_SUMMARY + " text not null," 
      + COLUMN_DESCRIPTION
      + " text not null" 
      + COLUMN_DATE + "date not null " //i have added the date column
      + ");";
     public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);

  }

  public static void onUpgrade(SQLiteDatabase database, int oldVersion,
      int newVersion) {
    Log.w(FirstClass.class.getName(), "Upgrading database from version "
        + oldVersion + " to " + newVersion
        + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_TODO);
   // database.execSQL("INSERT INTO "+TABLE_TODO+" VALUES (null, datetime()) ");
    onCreate(database);
  }

これが私のTodoDatabaseHelper.javaです

private static final String DATABASE_NAME = "todotable2.db";
  private static final int DATABASE_VERSION = 2;

  public TodoDatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  // Method is called during creation of the database
  @Override
  public void onCreate(SQLiteDatabase database) {
    FirstClass.onCreate(database);
  }

  // Method is called during an upgrade of the database,
  // e.g. if you increase the database version
  @Override
  public void onUpgrade(SQLiteDatabase database, int oldVersion,
      int newVersion) {
    FirstClass.onUpgrade(database, oldVersion, newVersion);
  }
4

3 に答える 3

1

私が正しいかどうかはわかりませんが、oUnUpgrade メソッドでデータベースを削除した場合、システムはどのデータベースをアップグレードする必要がありますか? つまり、データベースに新しいバージョンを設定した場合、以前と同じデータベースである必要がありますが、変更されただけで削除されていません。

同様のケースがあり、ユーザー入力値を保存しましたが、アプリがクラッシュするたびに。したがって、バージョンを同じ整数に設定し (たとえば、古いデータベースと新しいデータベースの場合はバージョン 1 のみ、古いデータベースの場合はバージョン 1、新しいデータベースの場合はバージョン 2 ではありません)、古いデータベースを削除し、すべての新しいデータを含む完全に新しいデータベースを作成しました。これはとてもうまくいきました....

編集

上記のステートメントは更新用であり、アップグレード用ではありません。申し訳ありません。しかし、あなたのコードを見たので、エラーのためにデータベースが作成されない可能性はありますか? COLUMN_DESCRIPTION の後にポイントを設定するのを忘れていたと思います。これが私の編集です:

      private static final String DATABASE_CREATE = "create table " 
        + TABLE_TODO
        + "(" 
        + COLUMN_ID + " integer primary key autoincrement," 
        + COLUMN_CATEGORY + " text not null," 
        + COLUMN_SUMMARY + " text not null," 
        + COLUMN_DESCRIPTION
        + " text not null," //HERE YOU FORGOT COMMA
        + COLUMN_DATE + " date not null" //i have added the date column
        + ");";
于 2012-11-28T07:55:49.133 に答える
0

私によるとその方法は

@Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { FirstClass.onUpgrade(database, oldVersion, newVersion); }

問題を吸収しています。バージョンをアップグレードしているだけで、データベースを再度作成していないためです。データベースをアップグレードした後、テーブルに対して行ったのと同じように onCreate を呼び出す必要があります。

于 2012-11-28T08:33:35.963 に答える
0

onUpgrade()を使用 すると、データベース全体ではなくテーブル構造を削除するだけです。

解決:

(1) データベースを更新するときにプログラムでアプリケーションを削除します。

(2)モバイルでアプリケーションをアンインストールして再インストールする必要があります。

于 2013-01-28T06:32:16.023 に答える