2011-04-07 11 views
7

में एक autoincrement अनुक्रम संख्या को कैसे रीसेट कर सकता हूं Ormlite में तालिका sqlite_sequence को अद्यतन करने के लिए कैसे? मुझे बस अद्यतन सीक की जरूरत है। मैं ORMLite के माध्यम से उस तालिका को कैसे प्राप्त कर सकता हूं?मैं स्क्लाइट

संपादित

मैं ORLite यह करने के लिए उपकरण नहीं मिल रहा है, इसलिए बजाय मैं सरल SQLite क्वेरी का उपयोग करें। मेरी कक्षा में OrmLiteSqliteOpenHelper का विस्तार करता है मैं उस अद्यतन को बनाने के लिए SQLiteDatabase का उपयोग करता हूं।

EDIT2;)

अपने प्रोजेक्ट में मैं वर्ग सबक और वर्ग WeekDefinition लागू हैं।

class Lesson{ 
    @DatabaseField(generatedId=true) 
    private int id; 
    ... 
} 

class WeekDefinitions{ 
    @DatabaseField(generatedId=true) 
    private int id; 
    @DatabaseField(foreign=true, columnName="lesson_id") 
    private Lesson lesson; 
    ... 
} 

अब, जब मैं नया सबक जोड़ता हूं, आईडी बढ़ती है। उदाहरण

id = 1 Math 
id = 2 English 
id = 3 Medicine 

और weekDefinition में के लिए:

id = 1 lesson_id = 1 nr = 20 
id = 2 lesson_id = 1 nr = 22 
id = 3 lesson_id = 2 nr = 32 
... 
id = 12 lesson_id = 3 nr = 3 

SQLite (जब उपयोग autoincrement) sqlite_sequence में इस पंक्ति जोड़ने

rowId = 1 name = lesson   seq = 3 
rowId = 2 name = weekDefinition seq = 12 

अब, मैं टेबल सबक और WeekDefinition से सभी पंक्तियों को हटा दें। पाठ और वीकडीफ उसके बाद खाली हैं, लेकिन sqlite_sequence अभी भी वही है। और इस समस्या है, क्योंकि तालिका पाठ में आईडी (पाठ के लिए sqlite_sequence से seq और 1 जोड़) मूल्य 4 से शुरू:

id = 4 Math 
id = 5 English 
id = 6 Medicine 

और weekDefinition

id = 13 lesson_id = 1 nr = 20 
id = 14 lesson_id = 1 nr = 22 
id = 15 lesson_id = 2 nr = 32 

और सबक आईडी = 4 के लिए, गणित मैं चाहिए सप्ताह डीफिनिटीस प्राप्त करें, लेकिन सप्ताह में परिभाषाएं पाठ_आईडी का मूल्य केवल 1 से 3 है और यह मेरी समस्या है। मुझे sqlite_sequence तालिका "रीसेट" की आवश्यकता है (या बेहतर समाधान है?)

+1

क्या आप कृपया अपने प्रश्न को फिर से लिख सकते हैं और अधिक जानकारी प्रदान कर सकते हैं Bandzio। मुझे नहीं पता कि आप यहां क्या पूछ रहे हैं। "Sqlite_sequence" क्या है? क्या आप केवल डेटाबेस में किसी तालिका से अनुक्रम संख्या प्राप्त करने का प्रयास कर रहे हैं? तो जिस वस्तु पर आप रह रहे हैं _only_ में जेनरेट आईडी है? – Gray

+0

बैंडज़ियो, आपको वास्तव में एक जवाब स्वीकार करना चाहिए; दोनों अच्छे हैं और 6 महीने से अधिक के लिए रहे हैं – Noah

उत्तर

0

ओह, मुझे अब मिल गया है। यदि आप ORMLite में सामान्य डेटाबेस आदेश जारी करना चाहते हैं, तो आप updateRaw विधि का उपयोग कर सकते हैं। javadocs देखें। अन्य आदेशों के लिए executeRaw भी है।

lessonDao.updateRaw("delete from 'lesson';"); 
lessonDao.updateRaw("delete from sqlite_sequence where name='lesson';"); 
weekDefinitionDao.updateRaw("delete from 'weekdefinition';"); 
weekDefinitionDao.updateRaw(
    "delete from sqlite_sequence where name='weekdefinition';"); 

तुम भी छोड़ और मेज से बनाने के साथ-साथ हो सकते हैं:

TableUtils.dropTable(WeekDefinition.class); 
TableUtils.dropTable(Lesson.class); 
TableUtils.createTable(Lesson.class); 
TableUtils.createTable(WeekDefinition.class); 

मुझे लगता है कि यही कारण है कि आपके आवेदन इस डेटाबेस आंतरिक संख्या के आधार पर किया जाता है असली सवाल है? यह वास्तव में परवाह नहीं करना चाहिए।

  • नंबर को प्रदर्शित करने के बारे में कैसे नहीं, तो यह 1 या 1001 हो सकता है और आपका आवेदन कोई फर्क नहीं पड़ता?
  • आप सब कुछ भी कभी भी हटा नहीं सकते लेकिन शायद एक छिपे हुए बुलियन क्षेत्र को जोड़ सकते हैं। इसलिए यदि वे फिर से जोड़े जाते हैं, तो छुपा क्षेत्र गलत पर सेट किया जा सकता है और Math अभी भी आईडी # 1 पर होगा।
8

आपके अंदर।डाटाबेस फ़ाइल एक मेज कहा जाता है sqlite_sequence

प्रत्येक पंक्ति है दो कॉलम name जो इस मेज पर वर्तमान अंतिम मान

आप 0

को अद्यतन कर सकते हैं का संकेत तालिका seq एक पूर्णांक का नाम है

लेकिन सावधान रहें कि आपकी तालिका इस आईडी का उपयोग अद्वितीय पहचानकर्ता के रूप में करती है।

18

मार्कोस वास्कोनसेलोस 'answer पर निर्माण:

UPDATE sqlite_sequence SET seq = (SELECT MAX(col) FROM Tbl) WHERE name="Tbl" 

इस क्वेरी Tbl तालिका में col पहचान स्तंभ में सबसे बड़ा मान को seq सेट हो जाएगा, इसलिए वहाँ बाध्यताओं का उल्लंघन का कोई खतरा नहीं है।

+0

धन्यवाद यह वही है जो मैं खोज रहा था – Mirko

1
UPDATE SQLITE_SEQUENCE SET SEQ= 'value' WHERE NAME='table_name'; 
संबंधित मुद्दे