2011-07-09 4 views
0

データベースを新しいバージョンにアップグレードしたいと考えています。どのように私はそれをあなたに与えるアップグレード方法でやったらいいですか?このコードでSQLDatabaseをアップグレードするには?

private static final String DATABASE_NAME = " nba"; 
private static final String DATABASE_TABLE = "bookList"; 
private static final int DATABASE_VERSION = 1; 
private static String TAG = "Upgrading Database!"; 
public static final String KEY_BOOK = "book"; 
public static final String KEY_AUTHOR = "author"; 
public static final String KEY_ISBN = "isbn"; 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_RATING = "rating"; 
public static final String KEY_STATUS = "status"; 

private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 


private static final String DATABASE_CREATE = 
     " create table " + DATABASE_TABLE + " (" 
     + KEY_ROWID + " integer primary key autoincrement, " 
     + KEY_AUTHOR + " text not null, " 
     + KEY_BOOK + " text not null, " 
     + KEY_RATING + " text not null, " 
     + KEY_STATUS + " text not null, " 
     + KEY_ISBN + " text not null); "; 

private final Context mCtx; 


public DbAdapter (Context ctx){ 
    this.mCtx = ctx; 



     } 

     private static class DatabaseHelper extends SQLiteOpenHelper{ 
     DatabaseHelper(Context context){ 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 


     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
     db.execSQL(DATABASE_CREATE); 


     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
         + newVersion + ", which will destroy all old data"); 
       db.execSQL("DROP TABLE IF EXISTS user"); 
       db.execSQL("DROP TABLE IF EXISTS site"); 
       db.execSQL("DROP TABLE IF EXISTS site_user"); 
       db.execSQL("DROP TABLE IF EXISTS article"); 
       onCreate(db); 
    } 
} 
     public DbAdapter open() throws SQLException{ 

      mDbHelper = new DatabaseHelper(mCtx); 
      mDb = mDbHelper.getWritableDatabase(); 
      return this; 
     } 
     public void close(){ 
      mDbHelper.close(); 
     } 

     public long createBook(String book, String author, String isbn, float rating, String status){ 
      ContentValues initialValues = new ContentValues(); 
      initialValues.put(KEY_BOOK, book); 
      initialValues.put(KEY_AUTHOR, author); 
      initialValues.put(KEY_ISBN, isbn); 
      initialValues.put(KEY_RATING, rating); 
      initialValues.put(KEY_STATUS, status); 

      return mDb.insert(DATABASE_TABLE, null, initialValues); 

     } 
     public boolean deleteBook(long rowId){ 
      return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 

     } 
     public Cursor fetchAllBooks(){   
      return mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_ISBN,KEY_AUTHOR,KEY_ROWID, KEY_RATING, KEY_STATUS}, null, null, null, null, null); 
     } 
     public Cursor fetchBook(long rowId) throws SQLException{ 
      Cursor mCursor = 
      mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_AUTHOR,KEY_ROWID, KEY_ISBN, KEY_RATING, KEY_STATUS}, KEY_ROWID + "=" + 
         rowId, null, null, null, null); 

      if(mCursor != null){ 
       mCursor.moveToFirst(); 
      } 
      return mCursor; 

     } 
     public boolean updateBook(long rowId, String book, String author, String isbn, float rating, String status){ 
      ContentValues args = new ContentValues(); 
      args.put(KEY_BOOK, book); 
      args.put(KEY_AUTHOR, author); 
      args.put(KEY_ISBN, isbn); 
      args.put(KEY_RATING, rating); 
      args.put(KEY_STATUS, status); 

      return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)> 0; 


     } 


} 
+0

をチェックアウト? –

+0

別の列を追加したいのですが、データベースをアップグレードするほうが良いでしょう。しかし、私がそこに持っているのはちょうど開催場所です。私はちょうど私のデータベースをアップグレードする方法を知りたい。そこにコードがあります。 – yoshi24

+0

私は自分のエミュレータ上のテーブルに既にあるデータを消去したくありません。ちょうどそれをアップグレードしたい。 – yoshi24

答えて

1

データベースをアップグレードするための「魔法の弾丸」はありません。すべてのユーザーデータを吹き飛ばすことを除いて、現在の実装がうまくいく戦略。もっともエレガントで複雑なソリューションは、その値を保持する特別なテーブルを作成して、データベースにバージョン番号を割り当てることです。次に、バージョンに基づいて、onUpgradeメソッドは一連のalterステートメントを実行して、新しいバージョンに合わせて構造を変更します。私は段階的かつ反復的にそれを行うので、各バージョンは以前のバージョンからアップグレードする方法を知る必要があります。

つまり、バージョン3ではバージョン1からバージョン2へのアップグレード方法はわかりませんが、バージョン2からバージョン3へのアップグレード方法はわかります。新しいバージョンがバージョン5で、バージョン1では、スクリプトを実行して1から2、次に2から3、3から4、最後に4から5にアップグレードします。それは意味がありますか?

あなたはSQLでテーブル構造を変更する方法について尋ねている場合は、あなたがより具体的にすることができ、すでにそこにコードを持ってALTER TABLE statement.

+0

ありがとう、もし私がALTER TABLEを使用したいのであれば、私は上記のコードにどのように使用しますか?別の列を追加するには? – yoshi24

関連する問題