2013-06-29 15 views
7

धन्यवाद जोड़ने और :)पढ़ने के लिए एक नया स्तंभ

की मदद करने मैं उपयोग कर रहा हूँ के बाद activeandroid साथ तालिका अद्यतन करने के लिए कैसे ActiveAndroid 3.0 - Android 2.2 - मेरे ऐप में मैं एक मॉडल "उपयोगकर्ता" कहा जाता है। शुरुआत में मैंने केवल मॉडल (आईडी, नाम, पासकोड) कॉलम/विशेषताओं के साथ बनाया, मैंने एमुलेटर पर ऐप चलाया, और यह काम किया।

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
} 

फिर मैंने एक नया कॉलम/विशेषता - प्रोफ़ाइल इमेज जोड़ा। मैंने एमुलेटर पर ऐप चलाया और मुझे SQLite कॉलम प्रोफ़ाइल मिली IMage त्रुटि मौजूद नहीं है।

@Table(name = "user") 
public class User extends Model { 
    @Column (name = "name") 
    public String name; 
    @Column (name = "pass_code") 
    public String passCode; 
    @Column (name = "profile_image") 
    public String profileImage; 
} 

मैंने ActiveAndroid डीबी नाम बदलने और मैनिफेस्ट फ़ाइल में डीबी संस्करण गुणों को अद्यतन करने का प्रयास किया है।

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" /> 
<meta-data android:name="AA_DB_VERSION" android:value="2" /> 

लेकिन मुझे कॉलम प्राप्त करना जारी रहता है त्रुटि नहीं है।

ERROR AndroidRuntime Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ? 

मैं भी कोशिश की है, संयुक्त राष्ट्र: स्थापित करने, एमुलेटर से एप्लिकेशन एमुलेटर को पुन: प्रारंभ, ActiveAndroid.cacheClear बुला()। अभी तक इनमें से कोई भी काम नहीं किया।

मैं वास्तव में किसी भी मदद की सराहना करता हूं। धन्यवाद।

उत्तर

19

इसकी आवाज़ से, आप अपनी user तालिका को नई स्कीमा में माइग्रेट करने के लिए अपग्रेड स्क्रिप्ट खो रहे हैं। अपग्रेड स्क्रिप्ट्स में मूल रूप से डेटाबेस की पुरानी स्थिति से नए तरीके से कैसे प्राप्त किया जाए, इस पर निर्देश शामिल हैं। आपके विशिष्ट मामले में, आप SQLite को बताना चाहेंगे कि इसे मौजूदा उपयोगकर्ता तालिका में एक नया कॉलम, profile_image जोड़ना चाहिए।

स्कीमा 1 से 2 तक अपने डेटाबेस को अपग्रेड करने के लिए, AA_DB_VERSION मान 2 पर बढ़ाएं और अपग्रेड स्क्रिप्ट को नाम 2.sql दें। assets/migrations के तहत फ़ाइल सहेजें और यह निम्नलिखित सामग्री दे:

ALTER TABLE user ADD profile_image TEXT; 

स्क्रिप्ट हो सकता है SQL कथन कि execSQL(...) के माध्यम से SQLiteDatabase द्वारा क्रियान्वित किया जा सकता के किसी भी सेट होता है।

सक्रिय एंड्रॉइड के साथ स्कीमा माइग्रेशन पर अधिक जानकारी the wiki on the GitHub project page में मिल सकती है।

+0

सहायता के लिए धन्यवाद, बहुत सराहना की। – dagger

+1

जिज्ञासा से, ऐप को नहीं हटाया जाना चाहिए और इसे पुनर्स्थापित करने से काम करना चाहिए? या ऐप को हटाने से डीबी को भी हटाया नहीं जाता है? –

+1

@ जोशपिनटर: हां, ऐप को अनइंस्टॉल करना काम करना चाहिए। वास्तव में, 'साफ़ डेटा' को मारना ट्रैक भी करना चाहिए। हालांकि यह एक दीर्घकालिक समाधान नहीं है, क्योंकि आप शायद अपने ऐप के उपयोगकर्ताओं को उस प्रक्रिया के माध्यम से नहीं जाना चाहते हैं। सही दृष्टिकोण उचित स्कीमा अपग्रेड तर्क प्रदान करना है। –

1

"TEXT" लेबल के "VARCHAR" ActiveAndroid

अन्य सभी सुरक्षित शब्दों का उपयोग कर डेटाबेस माइग्रेशन के लिए बदल गया है "TEXT" के अलावा प्रकाश डाला गया। मैंने "VARCHAR" का उपयोग किया और यह काम किया।

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