Android (база данных) - PullRequest
       1

Android (база данных)

0 голосов
/ 11 декабря 2011

Я хочу использовать базу данных в моем проекте Android. Я пишу коды, но мне любопытно: когда я запускаю файл apk в моем телефоне, база данных отображается снова каждый раз, или это только первый раз, когда создается база данных? Потому что я хочу, чтобы база данных строилась только в первый раз? Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 11 декабря 2011

Ваш помощник по базе данных должен по крайней мере переопределить метод onCreate для создания таблиц в базе данных только один раз (когда база данных впервые создается на устройстве) ....

открытый класс ExampleDatabaseHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "ExampleDb";
    public static final int DB_VERSION = 1;
    public static final String TABLE_NAME = "ExampleTable";
    private static final String TABLE_CREATE_SQL = 
            "CREATE TABLE " + TABLE_NAME +" (" + 
                "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "Name TEXT NOT NULL " +
            ")";

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

    @Override
    public void onCreate(SQLiteDatabase db) {           
        db.execSQL(TABLE_CREATE_SQL);
    }
}

... при разработке приложения вы, вероятно, захотите внести изменения в структуру базы данных, поэтому вам может потребоваться удалить эти существующие таблицы и запустить новый SQL для их воссоздания.

Вы можете сделать это, переопределив метод onUpdate, но вы должны помнить, что нужно увеличивать версию базы данных каждый раз, когда вы меняете схему, чтобы сработал onUpdate ...

   public class ExampleDatabaseHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "ExampleDb";
    public static final int DB_VERSION = 2;
    public static final String TABLE_NAME = "ExampleTable";
    private static final String TABLE_CREATE_SQL = 
            "CREATE TABLE " + TABLE_NAME +" (" + 
                "_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "Name TEXT NOT NULL, " +
                "PhoneNumber TEXT NOT NULL" +
            ")";

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

    @Override
    public void onCreate(SQLiteDatabase db) {           
        db.execSQL(TABLE_CREATE_SQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

}

В опубликованном приложении вы, вероятно, захотите улучшить onUpdate, чтобы сохранить данные из предыдущей версии в новом формате, но в процессе разработки вышесказанное подойдет. Этот пример достаточно прост, поскольку он имеет дело только с одной таблицей в базе данных. Я бы посоветовал создать класс для каждой таблицы со статическими методами для работы с onCreate и onUpgrade для этой таблицы, которые вызываются из вспомогательного класса ...

public class ExampleDatabaseHelper extends SQLiteOpenHelper {

    public static final String DB_NAME = "ExampleDb";
    public static final int DB_VERSION = 1;

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

    @Override
    public void onCreate(SQLiteDatabase db) {   
        ExampleTable1.onCreate(db);
        ExampleTable2.onCreate(db);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        ExampleTable1.onUpgrade(db, oldVersion, newVersion);
        ExampleTable2.onUpgrade(db, oldVersion, newVersion);
    }
}
1 голос
/ 11 декабря 2011

База данных будет создана при первой попытке доступа к ней и будет сохраняться с этого момента, даже при установке более новой версии приложения.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...