2012-03-15 5 views
1

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

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); 
}} 

Я не могу добавить любой элемент или отредактировать любой элемент без unistall приложения затем переустановить HELP :(пожалуйста! !! спасибо большое!

+0

Вы можете использовать программу редактора SQLite для создания/редактирования таблицы, а затем сохранить и скопировать ее в папку с ресурсами, откуда вы можете использовать и повторно сохранить ее на SDCard, если хотите. – Demonick

ответ

2

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

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

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

+0

Я понял! Отлично СПАСИБО, поэтому каждый раз, когда я его обновляю, я изменю номер. – FirstLaw

+0

да точно ... вот как это должно быть – waqaslam

-3

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

это как вещи работает

+0

Эй, ответ, который я выбрал, исправил мою проблему. :) Спасибо за вашу помощь. ура – FirstLaw

1

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

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

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

спасибо, но я выбрал ответ, который был доставлен мне первым. благодарит за вашу помощь! ура – FirstLaw

0

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

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

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

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

Смежные вопросы