2015-12-10 5 views
0

Могу ли я использовать этот способ для добавления другой таблицы в мою базу данных? См. Мой onupgrade, который я пробовал, это возможно. и одна вещь - обновленная база данных каждый раз, когда мы добавляем или удаляем информацию.Добавление другой таблицы в базу данных android

public class DataBaseOperations extends SQLiteOpenHelper { 
public static final int DATABASE_VERSION = 1; 
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "+ 
     mDatabase.Tableinfo.Table_Name +"(" 
     +mDatabase.Tableinfo.Name+" TEXT," 
     +mDatabase.Tableinfo.phone+" INTEGER," 
     +mDatabase.Tableinfo.status+" TEXT," 
     +mDatabase.Tableinfo.Pic+" BLOB"+")"; 
private static final String Contacts_Table = "CREATE TABLE "+ 
     mDatabase.Tableinfo.contacts +"(" 
     +mDatabase.Tableinfo.Contacts_id+" INTEGER PRIMARY KEY," 
     +mDatabase.Tableinfo.Contacts_name+" TEXT," 
     +mDatabase.Tableinfo.Contacts_phone+" INTEGER," 
     +mDatabase.Tableinfo.status_contact+" TEXT," 
     +mDatabase.Tableinfo.Contact_pic+" BLOB"+")"; 

public DataBaseOperations(Context context) { 
    super(context, mDatabase.Tableinfo.Database_Name, null, DATABASE_VERSION); 
} 

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


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if(newVersion==1){ 
    db.execSQL(Contacts_Table); 
    onCreate(db); 

    } 
} 

и это мой этот контракт класс.

public class mDatabase { 
public mDatabase(){ 
} 
public static abstract class Tableinfo{ 
public static final String Name = "Name"; 
public static final String status = "status"; 
public static final String phone = "Phone"; 
public static final String Pic = "Pro_pic"; 
public static final String Database_Name = "User_info.db"; 
public static final String Table_Name = "User"; 
public static final String contacts = "Contacts"; 
public static final String Contacts_id= "Contact_id"; 
public static final String Contacts_name = "Contacts name"; 
public static final String Contacts_phone = "Contacts phone No"; 
public static final String status_contact = "Status"; 
public static final String Contact_pic = "pic"; 
} 
} 
+1

onUpgrade вызывается при обновлении базы данных. Лучше всего поместить весь оператор create table в onCreate, потому что он вызывается, когда база данных создается впервые, а ваш заголовок говорит, что mysql меняет это значение на sqlite – Raghunandan

+0

, но не создает вторую таблицу onCreate(); , Это создает только первый. –

+1

У вас нет кода, который создает вторую таблицу – Kuffs

ответ

0

No.

Ваш onUpgrade просто вызывает

db.execSQL(SQL_CREATE_ENTRIES); 

затем перенаправляет на

onCreate(db); 

, где она называет то же самое снова.

Посмотрите на этот ответ. Это дает лучший способ обработки обновлений.

Upgrade database on deployed Android app on update

В разъяснении. onCreate ТОЛЬКО называется, когда база данных не существует.

onUpgrade называется IF, если база данных существует И существующий номер версии базы данных ниже номера версии, который вы используете в конструкторе OpenHelper.

Если ксисты базы данных и номера версий одинаковы, вызывается NEITHER.

+0

, пожалуйста, снова просмотрите вопрос. Это была ошибка –

+0

Это все еще не работает. Вы перенаправляетесь на OnCreate из вашего onUpgrade. Используйте onCreate для создания вашей базы данных в первый раз. Затем используйте onUpgrade, когда номер версии изменится на UPGRADE вашей базы данных. Опять же, прочитайте мой ответ на вопрос, который я связал, который дает простой способ обработки обновлений. – Kuffs

+0

Если я добавлю db.execSQL (Contatcs-) в onCreate; он должен работать правильно, потому что он будет перенаправлен. правильно? –