2011-07-25 24 views
0

SQLiteに問題がありますが、DataBaseHelper(onCreateメソッドとonUpgradeメソッドを格納しているもの)を呼び出すと機能しません。エラーはありません。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"; 
[...] 

それに役立つことができれば私も、ここではフランス語フォーラムに投稿している: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でした。 APIによる

+0

ありがとう、それはとても愚かなエラーでした – toshiro92

1

..

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

以来:APIレベル1

はオープ​​ン、作成するために、ヘルパーオブジェクトを作成し、および/またはデータベースを管理します。このメソッドは常に非常に迅速に戻ります。データベースは、実際には作成されず、getWritableDatabase()またはgetReadableDatabase()のいずれかが呼び出されるまで開かれません。

getReadableDatabase()またはgetWritableDatabase()を必ず実行する必要があります。 open()メソッドにgetWritableDatabase()が表示されていますが、開いているメソッドをどこで実行しているのかわかりません。私はデータベースヘルパーを個人的に使用していないので、わからないことがあるかもしれませんが、あなたのopen()がどこで実行されているのか分かりません。

+0

遅すぎた。 (ページを読み込んでコードを見ている時間を費やした)*肩をすくめて*問題が解決してうれしい。 :) –

+0

あなたの答えに感謝:) – toshiro92

関連する問題