2012-04-13 21 views
4

私はこのようSQLiteOpenHelper "onCreate"が呼び出されていませんか?断片から

fmdata = new FileManagerData(getActivity()); 

次のクラスをインスタンス(DBが存在しません)。 onCreate()が呼び出されず、データベースが作成されない理由を理解できません。

public class FileManagerData { 
public static final String TAG = FileManagerData.class.getSimpleName();; 


Context context; 
DBHelper dbHelper; 

public FileManagerData (Context context){ 
    this.context = context; 
    dbHelper = new DBHelper(); 
} 

private class DBHelper extends SQLiteOpenHelper{ 

    private static final String DB_NAME = "filename.db"; 
    private static final String DB_SQL = "filename.sql"; 
    private static final int DB_VERSION = 1; // internal number 

    public DBHelper() { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
      // this is NEVER called and my DB does not exist yet 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 
} 

EDIT:トリックは、データベースを使用しなければならないことである(読み書きする)ので、のonCreate()が呼び出されます。

+1

DBHelperを最初に開いて使用する必要がありますか? –

+0

これは良いヒントだったので、私はそれを受け入れてupvote – znat

答えて

11

DBへの最初のアクセスの後に呼び出されますonCreate方法。 DBにクエリを行い、onCreateが呼び出されます。

3

データベースは、以前の試行のものである可能性があります。

アプリをアンインストールしてもう一度お試しください。

+0

の答えとしてそれをマークしてください既に試した...それは問題ではない – znat

0

あなたはのonCreateでこれを置く必要があります。

fieldOneとfieldTwoは、あなたのテーブルの列の名前です
sqLiteDatabase.execSQL("create table" + DB_NAME + " (_id integer primary key autoincrement, " + fieldOne + "INTEGER, " + fieldTwo + "INTEGER);"); 

。また、ここを見て: http://www.sqlite.org/datatype3.html

0

このスレッドはすでに回答を受け付けています。 Neverthlessこれは私が追加しなければならないものである:

私が持っている:

protected class OpenHelper extends SQLiteOpenHelper { 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     try { 
      MHSqlDb.this.createTables(db); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

私はこれを呼んでいる:

iOpenHelper = new OpenHelper(iDbFileName, DATABASE_VERSION); 

現在データベースファイルは、この段階では存在しません。

次に、私はアプリのいくつかのデバッグを行います。 私は

iOpenHelper.getReadableDatabase(); 

どちらを呼び出すことはありません私は、データベースファイルがまだ存在しません

iOpenHelper.getWritableDatabase(); 

を呼び出します。今私はデバッガから私は突然、(iDbFileNameの名前で)データベースファイルを参照してくださいすることができますアプリを殺す。 OpenHelperのonCreateメソッドは呼び出されません。

したがって、データベースファイルが存在せず、getReadableDatabase()またはgetWritableDatabase()が呼び出されたときに、onCreateメソッドの意図が呼び出されるように見えることに同意しますが、これは必ずしも当てはまりません。

0

アプリケーションをアンインストールするとdbが削除され、次の実行時にonCreateが呼び出されます。

関連する問題