2012-05-13 12 views
10

मेरे पास एक ऐसा एप्लिकेशन है जो ORMLite का उपयोग करता है। मुझे पूरे डीबी को रीसेट करने के लिए एक फ़ंक्शन बनाने की आवश्यकता है (मूल रूप से मुझे प्रत्येक डीबी से सभी पंक्तियां हटाने की आवश्यकता है, ऑटोइनक्रिकमेंट रीसेट करें और इंडेक्स रीसेट करें)।ORMLite सभी टेबल रीसेट करें

मैं शायद हर तालिका पर एक छंटनी लॉन्च करके ऐसा कर सकता हूं लेकिन क्या ORMLite को ऐसा करने के लिए कुछ विशिष्ट तरीका है?

उत्तर

29

ORMLite में पूरे डीबी को रीसेट करने के लिए कोई विशेष विधि नहीं है। यह TableUtils.clearTable(connectionSource, dataClass)) method का समर्थन करता है जो तालिका से सभी पंक्तियों को हटा देता है, जो सूचकांक को साफ़ करेगा, लेकिन यह ऑटो-वृद्धि को रीसेट नहीं करेगा। साथ ही, मुझे यकीन नहीं है कि "रीसेट इंडेक्स" का अर्थ उन्हें साफ़ करने से अधिक है। ऑटो-इंक्रिमेंट को रीसेट करने की प्रक्रिया बेहद डेटाबेस निर्भर होने जा रही है, इसलिए ओआरएमएलएट की वैसे भी मूल समर्थन कभी भी नहीं होगी।

मुझे लगता है कि आपकी सबसे अच्छी शर्त drop the table using TableUtils.dropTable() और फिर पुन: create it with TableUtils.createTable() है।

+0

ही प्रभाव dbhelper.onUpgrade (dbhelper.getWritableDatabase(), 0, DatabaseHelper.DATABASE_VERSION) से प्राप्त किया जा सकता है; ? – max4ever

+0

अरे @ max4ever, मुझे नहीं लगता कि यह आपके लिए करेगा। आपको 'onUpgrae (...)' विधि को लागू करना है, इसलिए यह इस बात पर निर्भर करता है कि आप इसे कैसे करते हैं। यदि आपका 'ऑन अपग्रेड (...)' ड्रॉप हो जाता है और फिर बनाता है तो यह काम करेगा, हां। – Gray

+0

@Gray प्राथमिक IDX ऑटो इंक आप इस एसक्यूएल साथ execRaw() का उपयोग कर सकते नष्ट करने के लिए: executeRawNoArgs ("sqlite_sequence से हटा दें जहां name = '' + TableName + '';"); – drdrej

1

आप TableUtils.createTableIfNotExists (स्रोत, डेटा क्लास) का भी उपयोग कर सकते हैं। परीक्षण करते समय उपयोगी।

4

वहाँ एक तरह से संभव है .. डेटाबेस को हटाने, लेकिन कम से लॉगिन db बनाई गई है इस विधि, आम तौर पर प्रयोग किया जाता है जब उपयोगकर्ता को लॉग आउट और एक अन्य प्रयोक्ता आईडी आदि के साथ लॉगिन और लॉगआउट पर db हटाया जाता है।

mContext.deleteDatabase("xxxxxx"); 

जहां "xxxxx" डेटाबेस नाम है।

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