4

フラグメントから、この方法でインスタンス化します

fmdata = new FileManagerData(getActivity());

次のクラス。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) {

    }   
}

編集:トリックは、データベースを(読み取りまたは書き込みに)使用する必要があるため、onCreate()が呼び出されることです。

4

5 に答える 5

11

このonCreateメソッドは、DBへの最初のアクセス後に呼び出されます。DBにクエリを実行すると、onCreate呼び出されます。

于 2012-04-13T21:24:32.937 に答える
3

おそらく、データベースは以前の試行から存在しています。

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

于 2012-04-13T20:31:52.277 に答える
0

onCreate thisを入力する必要があります:

sqLiteDatabase.execSQL("create table" + DB_NAME + " ( _id integer primary key autoincrement, " + fieldOne + "INTEGER, " + fieldTwo + "INTEGER);");

ここで、fieldOneとfieldTwoは、テーブルの列の名前です。こちらもご覧ください: http ://www.sqlite.org/datatype3.html

于 2012-04-13T21:11:16.740 に答える
0

私はこのスレッドがすでに答えを受け入れていることを知っています。それにもかかわらず、これは私が追加しなければならないものです:

私は持っています:

    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メソッドが呼び出されることはありません。

したがって、onCreateメソッドの目的は、データベースファイルが存在せず、getReadableDatabase()またはgetWritableDatabase()が呼び出されたときに呼び出されることであるように思われることに同意しますが、これが常に当てはまるとは限りません。

于 2013-03-28T23:54:01.343 に答える
0

アプリをアンインストールするとデータベースが削除されるため、次回の実行時にonCreateが呼び出されます。

于 2013-07-01T21:32:16.037 に答える