Обновление базы данных SQLite для Android - PullRequest
1 голос
/ 15 марта 2012

Хорошо, я создал базу данных и понял, что каждый раз, когда я что-то изменяю в базе данных, мне приходится удалять, а затем переустанавливать приложение :(, что очень расстраивает ... вот мой код для моей базы данных, надеюсь, вы сможете помочья! я не знаю, что не так с моим кодом:

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Cook_tab_snacks_data extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "Snacks";

public Cook_tab_snacks_data(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String sql = "CREATE TABLE IF NOT EXISTS snacks (" +
                    "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                    "name TEXT, " +
                    "disc TEXT, " +
                    "photo TEXT, " +
                    "prep TEXT, " +
                    "thumb TEXT, " +
                    "ingre TEXT, " +
                    "howto TEXT, " +
                    "info TEXT, " +
                    "snackId INTEGER)";
    db.execSQL(sql);

    ContentValues values = new ContentValues();

    values.put("name", "Name 1");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("thumb", "stub.png");
    values.put("prep", "takes 30 mins");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 2");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("thumb", "ic_launcher.png");
    values.put("prep", "takes 500 mins");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 3");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("thumb", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 4");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 5");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 6");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

    values.put("name", "Name 7");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);

}

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

Я не могу добавить какой-либо элемент или отредактировать какой-либо элемент без необходимости деинсталлировать приложение и затем переустановить :( ПОМОГИТЕ ПОЖАЛУЙСТА !!!много! * * 1004

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

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

public Cook_tab_snacks_data(Context context) {
    super(context, DATABASE_NAME, null, 2);  //previously 1, now 2
}

, как в onUpgrade метод, сначала он удалит существующую таблицу, а затем вызовет onCreate метод для воссоздания таблицы (таблиц)

1 голос
/ 16 марта 2012

Ваша функция onUpgrade не вызывается, потому что версия базы данных не меняется.Если вы увеличиваете номер версии каждый раз, когда вносите изменения в базу данных, функция onUpgrade удаляет ее и создает заново.

Последним входным параметром для суперконструктора является номер версии базы данных:

public Cook_tab_snacks_data(Context context) {
    super(context, DATABASE_NAME, null, 1);
}
0 голосов
/ 16 марта 2012

onCreate SQLiteOpenHelper вызывается только при создании базы данных.

Если вы хотите добавить значения в базу данных, вы можете сделать это в Activity или Service, создав экземпляр своего подкласса, вызвав getWritableDatabase(), а затем вызывать insert так же, как вы делаете в onCreate.

Если вы хотите изменить схему, вам нужно сделать это в onUpgrade.

пример блокнота - хорошее место, чтобы узнать об использовании SQLiteDatabase в приложении, если вам нужна некоторая практика.

0 голосов
/ 15 марта 2012

У вас тоже, потому что база данных создается только один раз, и если вы хотите что-то изменить, вы должны удалить ее.

так все и работает

...