में ऑपरेटर शामिल हैं I पोस्टस्ट्रेएसक्यूएल 9.1.4 का उपयोग करस्टोर और PostgreSQL JDBC ड्राइवर (9.1-901.jdbc4) के साथ कर रहा हूं।हेस्टोर से बचने में जेडीबीसी तैयार कथन
मैं एक PreparedStatement में ऑपरेटरों (?
, ?&
, ?|
) शामिल हैं उपयोग करने के लिए कोशिश कर रहा हूँ, फिर भी ?
चरित्र एक चर प्लेसहोल्डर के रूप में पार्स किया गया है। क्या यह चरित्र क्वेरी में सही ऑपरेटर भेजने के लिए बच निकला जा सकता है?
एक उदाहरण:
PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();
इस रूप में निम्न उदाहरण एक अपवाद उठाएंगे:
org.postgresql.util.PSQLException: No value specified for parameter 2.
अद्यतन:
pgjdbc ड्राइवर this snippet में क्वेरी पार्सर की जांच करने के बाद ऐसा लगता है कि ?
चरित्र से बचना संभव नहीं है। सवाल हमेशा बनी रहती हैं:
- वहाँ JDBC कल्पना जो एक
?
भाग निकले और एक पैरामीटर प्लेसहोल्डर के अलावा और कुछ हो जाने की अनुमति देता में कुछ भी है? - क्या इस समस्या के लिए केवल सादा स्टेटमेंट्स का उपयोग करने के बजाय क्वेरी स्ट्रिंग में मैन्युअल रूप से डाले गए चर के साथ कोई बेहतर काम है?
किसी भी जेडीबीसी को नहीं जानते लेकिन 'd = $ 1' काम करता है? –
नहीं, यह वैध वाक्यविन्यास नहीं है। '$ 1' पर एक वाक्यविन्यास त्रुटि फेंकता है। –
कई पोस्टग्रेएसक्यूएल इंटरफेस क्रमांकित प्लेसहोल्डर्स (यानी '$ 1',' $ 2', ...) पसंद करते हैं, मुझे लगता है कि जेडीबीसी उनमें से एक नहीं है। –