दिलचस्प पोस्ट
मैं एंड्रॉइड में गोल कोनों के साथ एक सूची दृश्य कैसे बना सकता हूं? क्या पृष्ठ का मेटा-टैग बदलने के लिए जावास्क्रिप्ट का उपयोग करना संभव है? Chrome स्थानीय jQuery कुकीज़ क्यों अनदेखा करता है? क्या एमडी 5 हैश डिक्रिप्ट करना संभव है? Google Maps API v3 + jQuery UI टैब्स के साथ समस्याएं "Java.lang.OutOfMemoryError: PermGen space" त्रुटि से निपटना PHP – और / या कीवर्ड सी # से विंडोज प्रतिरूपण एंड्रॉइड / जावा – दिनों के दिनों में फ़र्क विक्रेता-विशिष्ट छद्म तत्वों / वर्गों को एक नियम सेट में जोड़ना संभव क्यों नहीं है? स्क्रिप्ट को पासवर्ड के बिना अन्य उपयोगकर्ता के रूप में कैसे चलाया जाता है फोर्ट्रान 90 प्रकार का पैरामीटर 31 दिसंबर को क्यों साल का एक सप्ताह के रूप में 1 देता है? आप साइगविन पर विंडोज में क्रॉन्टाब कैसे चलाते हैं? क्या मुझे कोई भी शून्य * कास्टिंग करते समय static_cast या reinterpret_cast का उपयोग करना चाहिए

मैं SQLite में कैसे जांच कर सकता हूं कि एक टेबल मौजूद है?

मैं कैसे, मज़बूती से , SQLite में जांच कर सकता हूँ, क्या कोई विशेष उपयोगकर्ता तालिका मौजूद है?

मैं अविश्वसनीय तरीकों से पूछताछ नहीं कर रहा हूं जैसे कि जाँच की जा रही है कि तालिका पर "चुनें *" ने एक त्रुटि दी या नहीं (क्या ये भी एक अच्छा विचार है?)।

इसका कारण यह है:

मेरे कार्यक्रम में, मुझे पहले से ही मौजूद नहीं होने पर कुछ तालिकाओं को बनाने और फिर पॉप्युलेट करने की आवश्यकता है I

यदि वे पहले से मौजूद हैं, तो मुझे कुछ तालिकाओं को अपडेट करना होगा।

क्या मुझे यह संकेत देने के बजाए कुछ अन्य पथ लेना चाहिए कि सवाल में तालियाँ पहले से ही बनायी जा चुकी हैं – उदाहरण के लिए, डिस्क पर मेरे प्रोग्राम प्रारंभ / सेटिंग फ़ाइल में कुछ झंडे बनाकर / डालने / सेट करके?

या क्या मेरा दृष्टिकोण समझ में आता है?

वेब के समाधान से एकत्रित समाधान "मैं SQLite में कैसे जांच कर सकता हूं कि एक टेबल मौजूद है?"

मुझे लगता है कि अकसर किये गए सवाल प्रवेश याद किया

फिर भी, भविष्य के संदर्भ के लिए, पूरी क्वेरी है:

SELECT name FROM sqlite_master WHERE type='table' AND name='table_name'; 

यदि आप SQLite संस्करण 3.3+ का उपयोग कर रहे हैं तो आप आसानी से निम्न तालिका बना सकते हैं:

 create table if not exists TableName (col1 typ1, ..., colN typN) 

उसी तरह, आप तालिका का उपयोग केवल तभी निकाल सकते हैं जब यह प्रयोग किया जाता है:

 drop table if exists TableName 

एक भिन्नता SELECT NAME के ​​बजाय SELECT COUNT (*) का उपयोग करने के लिए होगी, अर्थात

 SELECT count(*) FROM sqlite_master WHERE type='table' AND name='table_name'; 

यह 0 पर वापस लौट आएगा, यदि तालिका मौजूद नहीं है, 1 यदि यह है यह संभवतः आपके प्रोग्रामिंग में उपयोगी है क्योंकि एक संख्यात्मक परिणाम प्रक्रिया के लिए तेज़ / आसान है। निम्नलिखित में यह दिखाया गया है कि आप एंड्रॉइड में SQLiteDatabase, कर्सर, कच्चेकैक्टर पैरामीटर के साथ कैसे कर सकते हैं।

 boolean tableExists(SQLiteDatabase db, String tableName) { if (tableName == null || db == null || !db.isOpen()) { return false; } Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName}); if (!cursor.moveToFirst()) { cursor.close(); return false; } int count = cursor.getInt(0); cursor.close(); return count > 0; } 

तुम कोशिश कर सकते हो:

 SELECT name FROM sqlite_master WHERE name='table_name' 

अगर आपको "तालिका पहले से मौजूद है" त्रुटि मिल रही है, तो नीचे दिए गए SQL स्ट्रिंग में परिवर्तन करें:

 CREATE table IF NOT EXISTS table_name (para1,para2); 

इस तरह आप अपवादों से बच सकते हैं

उपयोग:

 PRAGMA table_info(your_table_name) 

यदि परिणामस्वरूप तालिका खाली है तो your_table_name मौजूद नहीं है

प्रलेखन:

प्रगा स्कीमा.table_info (तालिका-नाम);

यह कार्यक्रम नामांकित तालिका में प्रत्येक स्तंभ के लिए एक पंक्ति देता है। परिणाम सेट के कॉलम में कॉलम का नाम, डेटा प्रकार शामिल है, चाहे कॉलम शून्य हो, और कॉलम के लिए डिफ़ॉल्ट मान हो। परिणाम सेट में "पीके" कॉलम कॉलम के लिए शून्य है जो कि प्राथमिक कुंजी का हिस्सा नहीं है, और प्राथमिक कुंजी के भाग वाले कॉलमों के लिए प्राथमिक कुंजी में स्तंभ का सूचकांक है।

Table_info pragma में नामित तालिका भी एक दृश्य हो सकती है।

उदाहरण आउटपुट:

 cid|name|type|notnull|dflt_value|pk 0|id|INTEGER|0||1 1|json|JSON|0||0 2|name|TEXT|0||0 

इसे देखें:

 SELECT name FROM sqlite_master WHERE type='table' ORDER BY name; 

SQLite तालिका नाम केस असंवेदनशील होते हैं, लेकिन तुलना सामान्य रूप से केस संवेदनशील होती है। यह काम ठीक से सभी मामलों में करने के लिए आपको COLLATE NOCASE जोड़ने की आवश्यकता है।

 SELECT name FROM sqlite_master WHERE type='table' AND name='table_name' COLLATE NOCASE 

यदि आप एफएमडीबी का प्रयोग कर रहे हैं, तो मुझे लगता है कि आप सिर्फ एफएमडीडाबेसएपेशन्स आयात कर सकते हैं और बूल फ़ंक्शन का उपयोग कर सकते हैं:

 [yourfmdbDatabase tableExists:tableName]. 

यदि तालिका अस्तित्व में नहीं है, तो तालिका मौजूद है या 0 अगर निम्नलिखित कोड 1 देता है।

 SELECT CASE WHEN tbl_name = "name" THEN 1 ELSE 0 END FROM sqlite_master WHERE tbl_name = "name" AND type = "table" 

ध्यान दें कि TEMP डेटाबेस में एक तालिका मौजूद है या नहीं, आपको sqlite_temp_master बजाय sqlite_temp_master उपयोग करना चाहिए:

 SELECT name FROM sqlite_temp_master WHERE type='table' AND name='table_name'; 

यहाँ मैं उपयोग किया है कि समारोह है:

एक SQLDatabase ऑब्जेक्ट = डीबी को देखते हुए

 public boolean exists(String table) { try { db.query("SELECT * FROM " + table); return true; } catch (SQLException e) { return false; } } 

इस कोड का उपयोग करें:

 SELECT name FROM sqlite_master WHERE type='table' AND name='yourTableName'; 

अगर लौटा सरणी संख्या 1 के बराबर होती है तो इसका मतलब है तालिका मौजूद है। अन्यथा यह अस्तित्व में नहीं है।

उपयोग

 SELECT 1 FROM table LIMIT 1; 

सभी रिकॉर्ड को पढ़ने से रोकने के लिए

सरल खोज क्वेरी का उपयोग करना – मेरी राय में – काफी विश्वसनीय इनमें से अधिकांश यह कई अलग-अलग डाटाबेस प्रकारों (एसक्यूएलएटी / मायएसक्यूएल) में टेबल अस्तित्व की जांच कर सकते हैं।

 SELECT 1 FROM table; 

यह समझ में आता है जब आप यह निर्धारित करने के लिए अन्य विश्वसनीय तंत्र का उपयोग कर सकते हैं कि क्या क्वेरी सफल हुई (उदाहरण के लिए, आप QtqlQuery के माध्यम से क्यूटी में एक डेटाबेस पूछते हैं)

यह मेरा कोड SQLite कॉर्डोवा के लिए है:

 get_columnNames('LastUpdate', function (data) { if (data.length > 0) { // In data you also have columnNames console.log("Table full"); } else { console.log("Table empty"); } }); 

और दूसरा जो है:

 function get_columnNames(tableName, callback) { myDb.transaction(function (transaction) { var query_exec = "SELECT name, sql FROM sqlite_master WHERE type='table' AND name ='" + tableName + "'"; transaction.executeSql(query_exec, [], function (tx, results) { var columnNames = []; var len = results.rows.length; if (len>0){ var columnParts = results.rows.item(0).sql.replace(/^[^\(]+\(([^\)]+)\)/g, '$1').split(','); ///// RegEx for (i in columnParts) { if (typeof columnParts[i] === 'string') columnNames.push(columnParts[i].split(" ")[0]); }; callback(columnNames); } else callback(columnNames); }); }); } 

मैंने सोचा कि मैं इस चर्चा में अपने 2 सेंट डालूँगा, भले ही यह एक पुरानी हो। यह क्वेरी स्केलर 1 देता है यदि मेज मौजूद है और 0 अन्यथा है।

 select case when exists (select 1 from sqlite_master WHERE type='table' and name = 'your_table') then 1 else 0 end as TableExists