जावा के लिए SQL पार्सर लाइब्रेरी [बंद]


141

SQL स्टेटमेंट को पार्स करने के लिए एक ओपन-सोर्स जावा लाइब्रेरी है?

यदि संभव हो, तो यह अनुकूलन योग्य या लचीला होना चाहिए ताकि विक्रेता-विशिष्ट सिंटैक्स को पार्स (या कम से कम अनदेखा) करने में सक्षम हो (जैसे कि ओरेकल टेबलस्पेस परिभाषाएं या MySQL के लिमिट क्लॉज)।

यदि नहीं, तो SQL मानक का कड़ाई से पालन भी ठीक है।

अपडेट: मुझे दो चीजों के लिए इसकी आवश्यकता है:

  • एक गैर-SQL डेटाबेस को एक SQL इंटरफ़ेस प्रदान करना (आंतरिक एपीआई कॉल के लिए मैपिंग)
  • वास्तविक डेटाबेस (जैसे ओरेकल) पर जाने से पहले SQL को फिर से लिखना

109
यह प्रश्न कैसे रचनात्मक नहीं है? क्या आप के साथ गलत है, Stackoverflow?
anton1980

11
इस सवाल को फिर से खोलना चाहिए। इसके अलावा, नींव
github.io/sql-parser

2
यह ऑफ-टॉपिक है - स्टैकऑवरफ्लो के लिए पुस्तकालयों, टूल्स, ट्यूटोरियल और अन्य ऑफ-साइट संसाधनों के लिए अनुरोध पर विषय पर विचार नहीं किया जाता है।
टोबे स्पाइट

मुझे लगता है कि यह एक और एसई साइट पर पूछा जाना चाहिए
पेटेरकुला

4
मुझे लगता है कि यह सवाल रचनात्मक है !!
कैजुअलिट

जवाबों:


51

ANTLR3 में ANSI SQL व्याकरण उपलब्ध है। आप अपने खुद के पार्सर बनाने के लिए उपयोग कर सकते हैं।

ANTLR4 में SQL व्याकरण है


5
जब आप अपने खुद के पार्सर जनरेटर को लागू कर सकते हैं तो ANTLR का उपयोग क्यों करें?
एडेप्टर

127
जब आप ANTLR का उपयोग कर सकते हैं तो अपना पार्सर जनरेटर क्यों उत्पन्न करें?
duffymo

इन प्रश्नों को पार्स करने के लिए Antlr SQL व्याकरण का उपयोग करने के लिए कोई लिंक कैसे हो सकता है? मैंने कुछ PL / SQL पार्सर्स के साथ-साथ लेकर्स और पार्सर्स के व्याकरण को देखा, लेकिन एक का उपयोग करने के लिए थाह करने में असमर्थ था। किसी भी लिंक की सराहना करेंगे।
अभिषेक

आप व्याकरण को ANTLR को खिलाते हैं, जो लेक्सर / पार्सर कक्षाओं को बाहर निकालता है, जिसे आप संकलित करते हैं और चलाते हैं। सबसे अच्छा स्रोत जिसके बारे में मैं सोच सकता हूँ वह है ANTLR संदर्भ: amazon.com/…
duffymo

हम अभी ANTLR 4 तक हैं। शायद पुराने व्याकरण नए संस्करण पर नहीं चलते हैं।
डफिमो

34
  • JSqlParser
  • प्रेस्टो के पार्सर ANTLR4 का उपयोग करते हुए लिखा गया है और इसकी अपनी अपरिवर्तनीय एएसटी कक्षाएं हैं जो पार्सर से निर्मित हैं। एएसटी में एक आगंतुक और सुंदर प्रिंटर है।

मेरे पास प्रेस्टो के लिए एक प्रश्न है, अगर मेरे पास स्टेटमेंट स्टेटमेंट = SQL_PARSER.createStatement (क्वेरी) है; मैं क्वेरी बॉडी कैसे प्राप्त कर सकता हूं, अर्थात चयन, से, कहां, आदि मान?
क्वार्क

कथन एक आधार वर्ग है। एक SELECT स्टेटमेंट टाइप क्वेरी का होगा। इसमें एक QueryBody शामिल है जिसमें उपवर्ग QuerySpecification है। UNION, TABLE, VALUES, सेट ऑपरेशंस आदि का समर्थन करने के लिए संरचना आपके द्वारा अपेक्षा से अधिक जटिल है, आप AstVisitor या DefaultTraversalVisitor को बढ़ाकर एक आगंतुक बना सकते हैं। पेड़ को कैसे चलना है, इसके एक उदाहरण के लिए SqlFormatter को देखें।
डेविड फिलिप्स

क्या प्रेस्टो का उपयोग करके किसी दिए गए प्रश्न से क्वेरी ट्री संरचना प्राप्त करना संभव होगा?
MockedMan.Object 10

मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। क्या आप अधिक विस्तार के साथ एक नया प्रश्न बना सकते हैं?
डेविड फिलिप्स

9

पार्सर

यदि आपको एक पार्सर की आवश्यकता है तो अपाचे डर्बी के कोड बेस में एक पार्सर होना चाहिए

विक्रेता-विशिष्ट SQL से निपटना

आप jdbc कनेक्शन ऑब्जेक्ट पर .native () विधि को देखना चाहते हैं जिसे आप इसे विक्रेता के तटस्थ प्रश्नों को पास कर सकते हैं जो कि विक्रेता के विशिष्ट प्रश्नों में पोस्टप्रोसेस हो जाएंगे।


वह मूल () विधि दिलचस्प लगती है। क्या इसका कोई उदाहरण है कि इसका उपयोग कैसे किया जा सकता है? वहां किस तरह के रूपांतरण संभव हैं?
थिलो

@Thilo जैसे SQL सर्वर 2014, देशी SQL Method (SQLServerConnection) : "यह विधि वर्तमान में SQL सर्वर के लिए Microsoft JDBC ड्राइवर द्वारा समर्थित नहीं है।"
गेरोल्ड ब्रोसर

@Thilo OJDBC के OracleConnectionWrapper इसका समर्थन की तरह लगता है।
गेरोल्ड ब्रॉसर

7

जावा के लिए सामान्य एसक्यूएल पार्सर खुला स्रोत नहीं है, लेकिन वास्तव में आप क्या देख रहे हैं।


1
जावा +1 के लिए सबसे अच्छा एसक्यूएल पार्सर

कोई भी उल्लेख आश्चर्यचकित github.com/porcelli/plsql-parser.git , इस सबसे व्यापक एसक्यूएल पार्सर मैंने देखा है है
zinking

5

Zql की कोशिश करो


4
zql बुनियादी प्रश्नों के लिए अच्छा है, लेकिन जब आप किसी क्वेरी को सम्मिलित करने का प्रयास करते हैं, जिसमें सम्मिलित कथन होता है, तो यह उड़ जाती है। तो मैं यह सुझाव नहीं है
zato

3

Hibernate sql और hql पार्सिंग के लिए ANTLR का उपयोग करता है।

JSqlParser भी एक अच्छा विकल्प है।हालांकि इसमें ओरेकल pl / sql को पार्स करते समय कुछ बग (या कुछ विशेषताएं लागू नहीं) हैं। विस्तार के लिए इसका मंच देखें।

इसलिए यदि आप oracle pl / sql को पार्स कर रहे हैं, तो ANTLR की सिफारिश की जाती है।


btw, altr BSD के अंतर्गत है।
हान झेंग

2

क्या आप पार्स SQL ​​के साथ करना चाहते हैं? मैं लेक्स / याक ( BYACC / J , जावा कप ) के कुछ जावा कार्यान्वयन की सिफारिश कर सकता हूं जिसके साथ आप मौजूदा SQL व्याकरण का उपयोग कर सकते हैं।

यदि आप वास्तव में परिणामित व्याकरण के साथ कुछ करना चाहते हैं, तो मैं डर्बी को देखने का सुझाव दे सकता हूं , जो जावा में लिखा एक खुला स्रोत SQL डेटाबेस है।


क्या Derby में SQL पार्सर का उपयोग एक स्वतंत्र JAR के रूप में उपलब्ध है?
लुलिस मार्टिनेज

1
मुझे नहीं पता। मैंने कभी डर्बी के स्रोत को नहीं देखा।
थॉमस जोन्स-लो

1
मुझे अब इस सवाल का जवाब पता है: नहीं, डर्बी के लिए SQL पार्सर एक अलग परियोजना नहीं है। आपको इसे डर्बी के अलावा किसी और चीज़ के लिए उपयोग करने के लिए अलग से खींचने की आवश्यकता होगी।
थॉमस जोन्स-लो

1
मैं 10 साल बाद फिर से आया :-)
लूलिस मार्टिनेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.