2015-11-04 7 views
0

Я добавил столбец (description) в таблицу account. Я также прочитал this guild, чтобы обновить мою базу данных. Тем не менее, у меня было немного запутанным, что это getHelper() метод в этом коде:Сбивание с модернизацией схемы ORMLite

Dao<Account, Integer> dao = getHelper().getAccountDao(); 
// change the table to add a new column named "description" 
dao.executeRaw("ALTER TABLE `account` ADD COLUMN description INTEGER;"); 

и откуда она взялась? Я не видел getHelper() был объявлен в моем классе DatabaseHelper. Кто-нибудь может мне помочь?

ответ

0

Вы должны иметь класс, расширяющий OrmLiteSqliteOpenHelper, где вы создаете таблицы (в onCreate) и обновлять их (в onUpgrade):

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 

    public DatabaseHelper(Context context) { 
     super(context, "database.db", null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { 
     try { 
      TableUtils.createTable(connectionSource, Account.class); 
     } catch (SQLException e) { 
      throw new RuntimeException("Error when create database tables", e); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) { 
     database.execSQL("ALTER TABLE `account` ADD COLUMN description INTEGER;"); 

     //same as: 
     //AccountDAO dao = getDao(Acount.class); 
     //dao.executeRaw("ALTER TABLE 'account' ADD COLUMN description INTEGER;"); 
    } 
} 

OrmLiteBaseListActivity, OrmLiteBaseService и OrmLiteBaseTabActivity обеспечивают способ getHelper для доступа к помощник базы данных, когда это необходимо, и автоматически создаст помощник в методе onCreate() и отпустите его в методе onDestroy() .

Кроме того, если вы используете классы выше, вы должны иметь что-то вроде этого:

public class MyACtivity extends OrmLiteBaseActivity<DatabaseHelper> { 

    //In this class, you can call getHelper() to obtain the DatabaseHelper instance 

} 
+0

Спасибо за ваш деталь ответа, так как из кода 'database.execSQL (" ALTER TABLE „счета“ ADD COLUMN description INTEGER; ");' равно 'Dao dao = getHelper(). GetAccountDao(); // измените таблицу, чтобы добавить новый столбец с именем «описание» dao.executeRaw («ALTER TABLE» account «ADD COLUMN description INTEGER;»); '? – DinhNgocHien

+0

Да, это то же самое. –

+0

Я отредактировал aswer. Теперь вы можете увидеть, как получить dao внутри класса DatabaseHelper. –