2011-12-07 7 views
5

मैं एंड्रॉइड में एक साधारण डेटाबेस बना रहा हूं। मेरे कोड को एक बार निष्पादित करने के बाद मैं नई तालिका जोड़ना चाहता हूं। अब, जब भी मैं EventDataSqlHelper क्लास में अपना ऑनक्रेट() विधि बदलने की कोशिश करता हूं, तो मेरा ऐप क्रैश हो जाता है।ऐप के बाद डेटाबेस में नई तालिका जोड़कर

शायद यह है क्योंकि SQLiteOpenHelper से जुड़ा हुआ है केवल तब ही निष्पादित किया जाता है जब ऐप पहली बार चलता है और हम इसमें और संशोधन नहीं कर सकते हैं।

मैंने नई तालिका जोड़ने के लिए एक अलग फ़ंक्शन लिखने का भी प्रयास किया। यह पहले निष्पादन पर पूरी तरह से काम करता था। लेकिन दूसरी खोज के बाद से यह अपने पिछले डेटाबेस को ओवरराइट कर देगा, इसलिए यह ऐप को क्रैश करने का कारण बनता है।

डेटाबेस डेटाबेस में नई टेबल जोड़ने के लिए कोई तरीका है यदि डेटाबेस पहले से ही बनाया गया है?

package org.example.sqldemo; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.provider.BaseColumns; 
import android.util.Log; 

/** Helper to the database, manages versions and creation */ 
public class EventDataSQLHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "events.db"; 
    private static final int DATABASE_VERSION = 1; 

    // Table name 
    public static final String TABLE = "events"; 

    // Columns 
    public static final String TIME = "time"; 
    public static final String TITLE = "title"; 

    public EventDataSQLHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String sql = "create table " + TABLE + "(" + BaseColumns._ID 
       + " integer primary key autoincrement, " + TIME + " integer, " 
       + TITLE + " text not null);"; 
     Log.d("EventsData", "onCreate: " + sql); 
     db.execSQL(sql); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 


    } 


} 

उत्तर

8

यह onUpgrade और DATABASE_VERSION है।

उदाहरण:

  • आप एक मेज events है, और फोन पर निष्पादित किया जाता है।
  • अब आप तय करते हैं, आप एक नई तालिका users चाहते हैं।

    1. परिवर्तन DATABASE_VERSION = 2; (यह आपका संस्करण संख्या है)
    2. onCreate() में
    3. , सभी तालिकाओं (create table events & create table users)
    4. onUpgrade() में
    5. बनाने के लिए, सभी तालिकाओं उस संस्करण oldVersion और NewVersion के बीच बदल बनाने (create table users)
  • बाद में आप नई टेबल जोड़ने के लिए, फिर से DATABASE_VERSION को बढ़ा देते हैं, और onCreate में सभी तालिकाओं बनाना चाहते हैं, और onUpgrade

2

आप अपनी क्वेरी के रूप में इस्तेमाल कर सकते हैं CREATE TABLE IF NOT EXISTS TABLENAME ..., जो आपके मौजूदा तालिका के ऊपर लिख नहीं होगा।

-1

विचाराधीन परिवर्तन पहले से ही यहाँ हल, अभी भी शुरुआती जो न इस लिंक को देख सकते हैं कि यदि।

https://youtu.be/OrJTtWrEfuc

संबंधित मुद्दे