मैं स्प्रिंग जेडीबीसीटीप्लेट का उपयोग करके ओरेकल डीबी से कुछ डेटा प्राप्त करने की कोशिश कर रहा हूं:

String query = "SELECT * FROM snow.ar_incident WHERE ROWNUM < 10";

    Map<String, List<Attachment>> map = jdbcTemplate.query(query, new ResultSetExtractor<Map<String, List<Attachment>>>() {

        @Override
        public Map<String, List<Attachment>> extractData(ResultSet rs) throws SQLException, DataAccessException {
            Map<String, List<Attachment>> map = new HashMap<>();
            //Mapping results to map
            return map;
        }
    });

लेकिन मुझे हमेशा केवल ar_incidient तालिका के लिए अपवाद मिल रहा है:

इसके कारण: org.springframework.jdbc.BadSqlGrammarException: StatementCallback; खराब SQL व्याकरण [चुनें * से snow.ar_incident WHERE ROWNUM < 10]; नेस्टेड अपवाद है java.sql.SQLSyntaxErrorException: ORA-00942: तालिका या दृश्य मौजूद नहीं है

यह कोड अन्य तालिकाओं के लिए बिल्कुल ठीक काम करता है लेकिन इसके लिए नहीं। मैंने कोर जावा एसक्यूएल कनेक्शन का उपयोग करके इस तालिका से डेटा प्राप्त करने का भी प्रयास किया:

Class.forName("oracle.jdbc.driver.OracleDriver");  
Connection con = DriverManager.getConnection(connString, user, pass);    
Statement stmt=con.createStatement();   
ResultSet rs = stmt.executeQuery("SELECT * from snow.ar_incident WHERE ROWNUM < 10");  

और यह बिना किसी समस्या के काम करता है, वही जब मैं SQL डेवलपर में क्वेरी चलाता हूं। मैंने दोनों समाधानों के लिए कई बार कनेक्शन विवरण की जाँच की है और वे समान हैं। मैं JDBCTemplate का उपयोग करके ar_incident तालिका तक क्यों नहीं पहुंच सकता?

5
Michael Dz 29 अगस्त 2018, 12:47
यदि आप क्वेरी को SELECT * FROM ar_incident में सरल बनाते हैं तो भी क्या यह त्रुटि उत्पन्न करता है?
 – 
Leviand
29 अगस्त 2018, 12:51
हां, हमेशा जब मैं ar_incident तालिका का उपयोग करने का प्रयास करता हूं।
 – 
Michael Dz
29 अगस्त 2018, 12:53
JdbcTemplate वही करता है जो आप करते हैं। साथ ही त्रुटि ड्राइवर से आती है न कि स्प्रिंग से। तो या तो तालिका/दृश्य वास्तव में मौजूद नहीं है या आपके पास सही विशेषाधिकार नहीं हैं या आप उस डेटाबेस को नहीं देख रहे हैं जो आपको लगता है कि आप देख रहे हैं।
 – 
M. Deinum
29 अगस्त 2018, 14:01

3 जवाब

सबसे बढ़िया उत्तर

JDBC ड्राइवर को नए संस्करण में अपडेट करने के बाद सभी समस्याएं गायब हो गईं।

0
Michael Dz 29 अक्टूबर 2018, 18:42
क्या आपको याद है कि कौन सा संस्करण काम नहीं करता था और कौन सा संस्करण काम करता था?
 – 
Nate
15 मई 2019, 21:26
मुझे OJDBC6 के साथ यह समस्या थी और जब मैं OJDBC8 में चला गया तो इसे हल कर दिया गया।
 – 
Michael Dz
16 मई 2019, 15:59

यह इस तथ्य के कारण हो सकता है कि आपके पास उस विशिष्ट तालिका पर चुनिंदा विशेषाधिकार नहीं हैं

grant select on snow.ar_incident to your_user;
0
MatMat 29 अगस्त 2018, 12:53
मुझे ऐसा नहीं लगता क्योंकि मैं उसी उपयोगकर्ता के लिए SQL डेवलपर में क्वेरी चलाता हूं और यह काम करता है।
 – 
Michael Dz
29 अगस्त 2018, 12:56
उसने कहा कि अगर वह जावा जेडीबीसी का उपयोग करता है तो वह काम कर रहा है, इसलिए यह समस्या नहीं है
 – 
Leviand
29 अगस्त 2018, 13:19

कृपया जांचें कि क्या अनुदान हैं और यदि आपको schema.table_name के साथ तालिका नाम उपसर्ग करने की आवश्यकता है।

1
Rishikesh Fanse 20 अगस्त 2020, 15:23