2010-07-31 11 views
6

मेरे पास एक बहुत लंबी स्ट्रिंग है जिसमें कई नई लाइनें शामिल हैं (यह वास्तव में एक लंबा SQL कथन है)।पर्ल के qq ऑपरेटर के जावा समतुल्य क्या है?

जब मैं इसे न्यूलाइन के साथ तोड़ता हूं तो एसक्यूएल पढ़ने में आसान होता है। लेकिन समय-समय पर, मुझे को एसक्यूएल डेवलपर में चिपकाने के लिए कोड से एसक्यूएल कथन कॉपी करने की आवश्यकता है।

पर्ल में, मैं हमेशा qq ऑपरेटर, जो आप दोहरे उद्धरण चिह्नों के स्थान पर उपयोग कर सकते हैं प्यार करता था:

आप इसे कुछ इस तरह का उपयोग करें:

$myString = qq{  
         SELECT * 
         FROM table_a a 
         JOIN table_b b ON a.id = b.id ... etc 
       }; 

वहाँ जावा में एक बराबर है? मैं यह अजीब इस तरह मात्रा में स्ट्रिंग को तोड़ने के लिए है करने के लिए लगता है:

String myString = " SELECT * " + 
        " FROM table_a a " + 
        " JOIN table_b b ON a.id = b.id ... etc "; 

और यह कोड से SQL विवरण कॉपी करने के लिए मुश्किल है। मैं सभी उद्धरणों को हटाने के लिए समाप्त होता हूं और

क्या जावा समतुल्य है? या जावा कोड में पठनीय, कॉपी-सक्षम SQL कथन डालने के लिए एक बेहतर चाल है?

+9

पर्ल सामान्य उद्धृत तारों में न्यूलाइन की अनुमति देता है। 'Q' और' qq' का उद्देश्य वैकल्पिक डिलीमीटर प्रदान करना है ताकि आपको अपने उद्धरणों को बैकस्लैश न करना पड़े। – friedo

उत्तर

5

मल्टी लाइन जावा

में स्ट्रिंग्स वहाँ एक जावा बराबर है?

लेखन के समय मुझे ऐसा नहीं लगता। हालांकि जावा में मल्टी-लाइन स्ट्रिंग्स को शामिल करने का प्रस्ताव है।


या वहां जावा कोड में पठनीय, कॉपी करने योग्य SQL कथन डालने के लिए एक बेहतर चाल है?

संगतता के माध्यम से एसक्यूएल प्रश्नों में पैरामीटर डालना बहुत अच्छा विचार नहीं है। प्रश्न बनाने में आपकी सहायता के लिए कक्षाएं और एपीआई हैं।

"क्वेरी रैपर"

रैपर पठनीयता में वृद्धि कर सकते, JDOQL (JDO) में उदाहरण के लिए, आप setWhere(), setLimit(), setDistinct() आदि

Query q = pm.newQuery (...); 
q.setWhere(...); 
q.setRange (...); 
q.setOrdering (...); 
q.setLimit(...); 
q.newParameter(...); // declare a query parameter 

q.execute(34.5); // execute the SQL query with a parameter 

का उपयोग कर जेपीए के लिए द्वारा एक प्रश्न बना सकते हैं , आप JPQL पढ़ सकते हैं।

यदि आप सादे जेडीबीसी का उपयोग कर रहे हैं, तो आप PreparedStatement पर भी देख सकते हैं।

+0

या 2010 टूल का उपयोग करें और ऑब्जेक्ट मैपिंग फ्रेमवर्क – TheLQ

+1

का उपयोग करें कि * है * जेपीए और जेडीओ जैसे विनिर्देश क्या हैं। – bakkal

+0

धन्यवाद, मैं अपने जीवन को थोड़ा आसान बनाने की उम्मीद कर रहा था। मैं अब प्रीपेयरस्टेटमेंट का उपयोग करता हूं और पैरामीटर के साथ "?" एस को प्रतिस्थापित करता हूं। मैं हमेशा System.output SQL कथन कर सकता हूं अगर मुझे इसे कॉपी करने और क्वेरी ब्राउज़र में पेस्ट करने की आवश्यकता है –

3

कोई समकक्ष नहीं है। विकल्प एसक्यूएल को एक प्रॉपर्टी फाइल में रखना है और प्रॉपर्टी ऑब्जेक्ट का उपयोग करके प्रॉपर्टी फाइल में पढ़ना है।

आपके पास अभी भी बैकस्लेश हैं, लेकिन जितना अधिक उद्धरण नहीं है।

SELECT * \ 
FROM table_a a \ 
JOIN table_b b ON a.id = b.id \ 
0

मैं कभी कभी की तरह

public static String cat(String ... lines) { } 

एक समारोह जो लाइनों संयोजित और नई-पंक्तियों कहते हैं लिखें। यदि स्ट्रिंग संकलन समय पर ज्ञात हैं, तो यह अक्षम है।

एसक्यूएल मामले में, मैं Bakkal से सहमत हूं - एक रैपिंग लाइब्रेरी का उपयोग करें। साम्राज्य-डीबी महान है। http://incubator.apache.org/empire-db/

मैं ओ/आर ढांचे का उपयोग करने के सुझाव के साथ असहमत हूं।

0

यह अभी मौजूद नहीं है। जावा 7 में मल्टी लाइन सपोर्ट पर चर्चा की गई, लेकिन यह काफी जल्दी बाहर निकाल दिया गया।

मैं

  1. क्या मैं सभी लाइनों पहले में शामिल होने और फिर उन्हें उद्धरण में डाल दिया। यदि आप एक्लेप्से जैसे संपादक में कर्सर स्ट्रिंग के अंदर हैं और आपने एंटर कुंजी ग्रहण आईडीई को के लिए स्ट्रिंग को विभाजित कर दिया है। तो आपको "अजीब" अनुक्रम "लाइन 1" + "लाइन 2" का गुच्छा मिलेगा ...।

  2. मैंने पते स्कैनिंग के लिए एक पार्सर लिखा था। परीक्षण करते समय मुझे एक ही समस्या थी क्योंकि पता रेखाएं प्रकृति द्वारा कई लाइनें लंबी होती हैं। इसलिए मैंने अपने परीक्षण मामलों के लिए ग्रोवी पर स्विच किया क्योंकि ग्रोवी मल्टी लाइन स्ट्रिंग्स और बहुत कुछ प्रदान करता है: http://groovy.codehaus.org/Strings+and+GString

0

यहाँ मैं क्या उपयोग है - मेरे लिए बहुत अच्छी तरह से काम करता है (मैं छोड़ कि 1 टिप्पणी करने के लिए के रूप में है) तो आप (किसी पता है अगर एक आईडीई या किसी अन्य संपादक करना होगा

// Tip: UltraEdit column-copy mode (alt-c) gets the SQL without quotes 
String sql = 
    "select           " + 
    //-- comment here 
    "big-long-query goes here...      " + 
    "last line          ".replaceAll("\\s+", " "); 

ग्रहण यह करता है?) आपके SQL टूल में कॉपी/पेस्ट करने से पहले कॉलम हाइलाइटिंग मोड होता है।

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