Вопрос по android – SQLiteOpenHelper «onCreate» не называется? (БД не существует)

4

Из фрагмента я создаю этот путь

<code>fmdata = new FileManagerData(getActivity());
</code>

следующий класс. Я не понимаю, почему onCreate () не вызывается, и моя база данных не создается.

<code>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) {

    }   
}
</code>

EDIT: Хитрость в том, что базу данных нужно использовать (для чтения или записи), чтобы вызывать onCreate ().

Вы должны сначала открыть / использовать DBHelper? user166390
это был хороший совет, пометьте его как ответ, чтобы я мог принять его и проголосовать znat

Ваш Ответ

5   ответов
11

onCreate методwill be called after first access to the DB, Сделать запрос к БД иonCreate будет вызван.

0

таким образом, вызовет onCreate при следующем запуске.

3

Удалите приложение и попробуйте снова.

Error: User Rate Limit Exceeded znat
0

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

Где fieldOne и fieldTwo - это имена столбцов вашей таблицы. Также посмотрите здесь: http://www.sqlite.org/datatype3.html

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). Метод onCreate OpenHelper никогда не вызывается.

Поэтому, хотя я согласен с тем, что намерение метода onCreate вызывается, когда файл базы данных не существует и вызывается либо getReadableDatabase (), либо getWritableDatabase (), это, очевидно, не всегда так.

Похожие вопросы