2011-07-25 18 views
0

我有一個SQLite的問題,當我調用DataBaseHelper(誰存儲onCreate和onUpgrade方法),即使DataBase的版本更改,我不工作,我沒有錯誤。onUpgrade和onCreate不運行時,我叫它

爲了恢復我的應用程序,我的主要活動調用執行DataBaseHelper的Singleton。

我的主要活動:

public class irdesApplication extends Activity { 

public static final String LOG_TAG="Droidnova"; 
private Context context = this; 
CheckUpdate chUp; 
ProgressBar bar; 
TextView txtLoading; 
Data d = new Data(); 
Singleton s; 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.page_loading); 
    bar = (ProgressBar) findViewById(R.id.ProgressBarLoad); 
    txtLoading = (TextView) findViewById(R.id.txtLoading); 
    new Thread(myThread).start(); 
    bar.setProgress(0); 

    //Initialisation de la Base 
    s.getInstance(context); 

    // ---------- Constitution des logs ------------ // 

    int logParam =0; 
    Log.v(LOG_TAG, "logParam value" + logParam); 
    [...] 

} 

}

我辛格爾頓:

package com.irdes.db; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 

public class Singleton { 

private static Singleton instance; 
private DataBaseHelper baseIrdes; 
private SQLiteDatabase db; 
private Data d = new Data(); 

private Singleton(Context context){ 
    System.out.println("Construction du Singleton"); 
    d.loadPercent = 10; 
    d.loadTxt = "Initialisation"; 
    baseIrdes = new DataBaseHelper(context, d.dbName, null, d.dbVersion); 
} 

public static synchronized Singleton getInstance(Context context){ 
     if (instance == null) 
     instance = new Singleton(context); 
     return instance; 
} 

public void setValue(SQLiteDatabase value){ 
    db = value; 
} 
public SQLiteDatabase getValue(){ 
    return db; 
} 

protected void open(){ 
    //on ouvre la BDD en écriture 
    db = baseIrdes.getWritableDatabase(); 
} 

protected void close(){ 
    //on ferme l'accès à la BDD 
    db.close(); 
} 

}

我DataBasHelper活動:

public class DataBaseHelper extends SQLiteOpenHelper { 

private Data d = new Data(); 

public DataBaseHelper(Context context, String name, CursorFactory factory, int version) { 
    super(context, name, factory, version); 
    System.out.println("Test"); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

    d.updateDataBase = true; 
    //Activation prise en charge Foreign Keys 
    db.execSQL("PRAGMA foreign_keys = ON;"); 

    [...] 
    db.execSQL("CREATE TABLE "+d.actualiteTable+" ("+d.colActualiteNum+ " INTEGER PRIMARY KEY , "+ 
      d.colActualiteTitre+ " TEXT, "+d.colActualiteDate+" TEXT, "+d.colActualiteLien+" TEXT, "+d.colActualiteTypeActu+" INTEGER, " + 
        "FOREIGN KEY ("+d.colActualiteTypeActu+") REFERENCES "+d.typeActuTable+" ("+d.colTypeActuNum+"))"); 
    [...] 
     System.out.println("Create table Complete"); 
     InsertRows(db); 
} 



@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    [...] 
    db.execSQL("DROP TABLE IF EXISTS "+d.actualiteTable); 
    [...] 

    onCreate(db); 

} 

public void InsertRows (SQLiteDatabase bdd){ 

    System.out.println("Chargement des données"); 

    bdd = this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 

    // --------- TypeActu -------- // 

    cv.put(d.colTypeActuNum, 1); 
    cv.put(d.coltypeActuLibelle, "Gen"); 
    bdd.insert(d.typeActuTable, d.colTypeActuNum, cv); 
    [...] 
    bdd.close(); 
    System.out.println("Données inserées"); 

}

和數據類更多的理解:

public static final String dbName="irdesDB"; 
public static final int dbVersion=46; 

public static final String actualiteTable="Actualite"; 
public static final String colActualiteNum="numActu"; 
public static final String colActualiteTitre="titre"; 
public static final String colActualiteDate="date"; 
public static final String colActualiteLien="lien"; 
public static final String colActualiteTypeActu="numTypeActu"; 
[...] 

我已經ASLO張貼在法國論壇在這裏,如果它可以幫助:http://www.developpez.net/forums/d1110144/java/general-java/java-mobiles/android/sqlite-onupgrade-ne-s-execute-plus/#post6141983

什麼問題?我不明白爲什麼onCreate和onUpgrade沒有執行。

回答

2

僅當您致電getWritableDatabase()getReadableDatabase()時纔會調用這些方法。

在你的情況下,調用baseIrdes。 open()方法。

同樣的問題是地址here

+0

謝謝,這是一個如此愚蠢的錯誤 – toshiro92

1

根據API ..

public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 

自:API等級1

創建一個輔助對象創建,打開,和/或管理數據庫。這種方法總是很快返回。在調用getWritableDatabase()或getReadableDatabase()之一之前,數據庫實際上並未創建或打​​開。

所以你必須確保你運行getReadableDatabase()getWritableDatabase()。我看到您的open()方法中有getWritableDatabase(),但我沒有看到您正在運行您的開放方法的位置?我沒有親自使用數據庫幫手,所以可能有些東西我不知道,但我沒有看到你的open()被執行在哪裏..

+0

看起來像我爲時已晚。 (加載頁面,花了一大堆時間看代碼)*聳肩*很高興的問題解決了。 :) –

+0

但謝謝你的回答:) – toshiro92

相關問題