2012-04-21 73 views
4

我使用ormlite.android.4.31.jar 我有典型的DatabaseHelperOrmlite數據庫幫手 - 的onCreate()不叫

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 

    private static final String DATABASE_NAME = "realestate.db"; 
    private static final int DATABASE_VERSION = 1; 

    private Dao<TabKraj, Integer> krajDao; 

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

    @Override 
    public void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) { 
     try { 
      TableUtils.createTable(connectionSource, TabKraj.class); 
      initData(); 
     } catch (Exception e) { 
      Log.e(DatabaseHelper.class.getName(), "Unable to create datbases", e); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVer, int newVer) { 
     try { 
      TableUtils.dropTable(connectionSource, TabKraj.class, true); 
      onCreate(sqliteDatabase, connectionSource); 
     } catch (SQLException e) { 
      Log.e(DatabaseHelper.class.getName(), "Unable to upgrade database from version " + oldVer + " to new " + newVer, e); 
     } 
    } 

    public Dao<TabKraj, Integer> getKrajDao() throws SQLException{ 
     if (krajDao == null) { 
      krajDao = getDao(TabKraj.class); 
     } 
     return krajDao; 
    } 

    private void initData(){ 
     Log.d(Constants.DEBUG_TAG, "data initiating"); 

     TabKraj k1 = new TabKraj(); 
     TabKraj k2 = new TabKraj(); 

     k1.setNazov("Kosicky kraj"); 
     k1.setId(1); 
     try { 
      getKrajDao().create(k1); 
     } catch (SQLException e) { 
      Log.e(Constants.DEBUG_TAG, "Data initialing ERROR"); 
     } 
    } 
} 

應用被卸載,清除數據...... 我在eclipse中以調試模式運行應用程序,調用DatabaseHleper的構造函數,但不調用onCreate()

問題在哪裏?

+2

你有沒有想過你的問題? 我有同樣的問題,並來到這裏找到答案。現在我發現onCreate()只會在你實際上對數據庫做某事的時候被調用(例如insert)。 – kmera 2012-06-02 16:11:33

回答

2

雖然您說數據已清除,但我懷疑Android認爲它沒有。要完全刪除數據,我將刪除該應用程序並重新安裝它。

由於您的onUpgrade調用onCreate您還可以增加DATABASE_VERSION值,這將導致數據被刪除和重新創建。

+0

Grey:謝謝,從eclipse運行應用程序之前,我做了設置 - 應用程序 - 管理應用程序:選擇我的應用程序並:強制關閉,清除數據並卸載。儘管onCreate沒有被調用。卸載後數據庫是否可能保留?如果是這樣的話肯定要刪除它? – falconseye 2012-04-21 15:16:52

+0

A已更改字段DATABASE_VERSION = 2;但onUpgrade()並沒有被調用。 – falconseye 2012-04-21 15:28:57

+0

您是否嘗試添加日誌語句@falconseye?也許調試器有問題。 'Log.i(getClass()。getName(),「Running onCreate」);' – Gray 2012-04-21 15:33:35

3

作爲@ K-梅拉說:

數據庫文件將只有當你在數據庫中做了一些操作,如「插入」創建。