मैं जेडीबीसी टेम्पलेट और नामांकित पैरामीटर जेडीबीसी टेम्पलेट के चमत्कारों के बारे में सीख रहा हूं। मुझे लगता है कि मैं क्या देखता हूं, लेकिन अंतर्निहित एसक्यूएल को देखने का कोई आसान तरीका है कि यह निष्पादित हो जाता है? मैं इसे डीबग उद्देश्यों के लिए देखना चाहता हूं (उदाहरण के लिए परिणामी एसक्यूएल को बाहरी उपकरण में डीबग करें)।वसंत JdbcTemplate में अंतर्निहित एसक्यूएल देख रहे हैं?
उत्तर
Spring documentation कहते हैं कि वे डीबग स्तर पर लॉग इन होते हैं: उत्पादन कुछ इस तरह दिखता
इस वर्ग के द्वारा जारी किए गए सभी एसक्यूएल श्रेणी के अंतर्गत डीबग स्तर पर लॉग ऑन है पूरी तरह से योग्य क्लास नाम टेम्पलेट इंस्टेंस (आमतौर पर जेडीबीसी टेम्पलेट) के अनुरूप है, लेकिन यदि आप जेडीबीसी टेम्पलेट क्लास के कस्टम सबक्लास का उपयोग कर रहे हैं तो यह अलग हो सकता है)।
एक्सएमएल संदर्भ में, आप की तरह लकड़हारा कुछ विन्यस्त करने की जरूरत:
<category name="org.springframework.jdbc.core.JdbcTemplate">
<priority value="debug" />
</category>
इस विषय हालांकि यहां एक महीने पहले चर्चा की गई और यह हाइबरनेट में के रूप में काम करने के लिए प्राप्त करने के लिए के रूप में आसान नहीं लगता है और/या यह अपेक्षित जानकारी वापस नहीं लौटा: Spring JDBC is not logging SQL with log4j प्रत्येक विषय के तहत यह विषय P6Spy का उपयोग करने का सुझाव देता है जिसे वसंत में this article के अनुसार भी एकीकृत किया जा सकता है।
असली SQL क्वेरी देखने के लिए "org.springframework.jdbc" नाम के रूप में उपयोग करें। – Verhagen
मुझे 100% यकीन नहीं है कि आप क्या प्राप्त कर रहे हैं क्योंकि आमतौर पर आप अपने SQL क्वेरी (पैरामीटर या नहीं) में जेडीबीसी टेम्पलेट में पास करेंगे, इस मामले में आप उन्हें लॉग इन करेंगे। यदि आपके पास PreparedStatement
एस है और आप नहीं जानते कि कौन सा निष्पादित किया जा रहा है, तो toString
विधि ठीक काम करनी चाहिए। लेकिन जब हम इस विषय पर हैं, तो एक अच्छा जेडीबीसी लॉगर पैकेज here है जो आपको स्वचालित रूप से अपने प्रश्नों को लॉग इन करने के साथ-साथ बाध्य पैरामीटर को हर बार देखने देगा। बहुत उपयोगी।
executing PreparedStatement: 'insert into ECAL_USER_APPT
(appt_id, user_id, accepted, scheduler, id) values (?, ?, ?, ?, null)'
with bind parameters: {1=25, 2=49, 3=1, 4=1}
कि 'प्रीपेडस्टेटमेंट # टूस्ट्रिंग()' वापस लौटाएगा एसक्यूएल स्ट्रिंग कहीं भी जेडीबीसी एपीआई में निर्दिष्ट नहीं है और इस प्रकार एक कार्यान्वयन विस्तार है। आप जेडीबीसी चालक बनाने और/या संस्करण पर निर्भर हैं कि यह काम करता है या नहीं। – BalusC
http://rkbloom.net/logdriver/ पर आपकी टिप्पणी में संदर्भित लिंक अब मृत प्रतीत होता है। क्या आप इस लॉगर के बारे में और जानकारी दे सकते हैं - मुझे मूल साइट पर इसका कोई संदर्भ नहीं मिल रहा है। धन्यवाद – Bob
यह मेरे लिए org.springframework.jdbc-3.0.6.RELEASE.jar के साथ काम करता है। मुझे स्प्रिंग डॉक्स में कहीं भी यह नहीं मिला (शायद मैं सिर्फ आलसी हूं) लेकिन मुझे पता चला (परीक्षण और त्रुटि) कि ट्रेसी स्तर ने जादू किया था।
मैं log4j-1.2.15 का उपयोग कर रहा slf4j (1.6.4) के साथ-साथ और गुण log4j कॉन्फ़िगर करने के लिए फ़ाइल:
log4j.logger.org.springframework.jdbc.core = TRACE
यह दोनों SQL विवरण और बाध्य मापदंडों को प्रदर्शित करता है इस तरह:
Executing prepared SQL statement [select HEADLINE_TEXT, NEWS_DATE_TIME from MY_TABLE where PRODUCT_KEY = ? and NEWS_DATE_TIME between ? and ? order by NEWS_DATE_TIME]
Setting SQL statement parameter value: column index 1, parameter value [aaa], value class [java.lang.String], SQL type unknown
Setting SQL statement parameter value: column index 2, parameter value [Thu Oct 11 08:00:00 CEST 2012], value class [java.util.Date], SQL type unknown
Setting SQL statement parameter value: column index 3, parameter value [Thu Oct 11 08:00:10 CEST 2012], value class [java.util.Date], SQL type unknown
एसक्यूएल प्रकार के बारे में सुनिश्चित नहीं हैं कि अज्ञात लेकिन मुझे लगता है कि हम इसे यहाँ अनदेखा कर सकते हैं सिर्फ एक एसक्यूएल के लिए
(यानी अगर आप बाध्य पैरामीटर मान में कोई दिलचस्पी नहीं कर रहे हैं) DEBUG
पर्याप्त होना चाहिए।
पैरामीटर मान TRACE स्तर पर मुद्रित प्रतीत होते हैं।यह मेरे लिए काम किया:
log4j.logger.org.springframework.jdbc.core.JdbcTem plate=DEBUG, file
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file
कंसोल आउटपुट:
02:40:56,519 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 1, parameter value [Tue May 31 14:00:00 CEST 2005], value class [java.util.Date], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 2, parameter value [61], value class [java.lang.Integer], SQL type unknown
02:40:56,528 TRACE http-bio-8080-exec-13 core.StatementCreatorUtils:206 - Setting SQL statement parameter value: column index 3, parameter value [80], value class [java.lang.Integer], SQL type unknown
jdbc टेम्पलेट और लॉगबैक के साथ काम नहीं कर रहा है – Emilio
यह log4j2 व एक्सएमएल मानकों के साथ मेरे लिए काम किया:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Properties>
<Property name="log-path">/some_path/logs/</Property>
<Property name="app-id">my_app</Property>
</Properties>
<Appenders>
<RollingFile name="file-log" fileName="${log-path}/${app-id}.log"
filePattern="${log-path}/${app-id}-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="org.springframework.jdbc.core" level="trace" additivity="false">
<appender-ref ref="file-log" />
<appender-ref ref="console" />
</Logger>
<Root level="info" additivity="false">
<appender-ref ref="file-log" />
<appender-ref ref="console" />
</Root>
</Loggers>
</Configuration>
परिणाम कंसोल और फ़ाइल लॉग था:
JdbcTemplate - Executing prepared SQL query
JdbcTemplate - Executing prepared SQL statement [select a, b from c where id = ? ]
StatementCreatorUtils - Setting SQL statement parameter value: column index 1, parameter value [my_id], value class [java.lang.String], SQL type unknown
बस कॉपी/पिछले
एचटीएच
- 1. वसंत jdbctemplate
- 2. वसंत JdbcTemplate MySQL
- 3. jdbctemplate
- 4. emacs में सीमित कॉलम देख रहे हैं
- 5. JdbcTemplate
- 6. JdbcTemplate
- 7. JdbcTemplate
- 8. JDBCTemplate
- 9. एक पुस्तक के संस्करण देख रहे हैं
- 10. एंड्रॉइड - डिवाइस पर SQLite डेटाबेस देख रहे हैं?
- 11. कैसे jdbctemplate
- 12. विजुअल स्टूडियो डीबगर में वैश्विक चर namespaced देख रहे हैं?
- 13. स्पष्ट बनाम अंतर्निहित एसक्यूएल
- 14. विजुअल स्टूडियो सी ++: एएसएम कोड देख रहे हैं?
- 15. पाइथन प्रक्रिया शुरू करने के लिए देख रहे हैं?
- 16. संलयन यात्री पर्यावरण चर नहीं देख रहे हैं?
- 17. वर्चुअल बेस सदस्य ओवरराइड नहीं देख रहे हैं?
- 18. वसंत (एमवीसी) एसक्यूएल इंजेक्शन से बचने के लिए?
- 19. Google इनडोर मानचित्र अपलोड कर रहे हैं? और मैं इसे कैसे देख और देख सकता हूं?
- 20. कैसे जब मैं jdbctemplate
- 21. एसक्यूएल: क्रमशः अद्यतन कर रहे हैं। VarBinary कॉलम पर लिखें
- 22. डेल्फी XE2 में मानक आईओएस नियंत्रण \ शैलियों को मानक कहां देख रहे हैं?
- 23. हेरोकू पर चल रहे रेल ऐप, सार्वजनिक पृष्ठों में सार्वजनिक पृष्ठ नहीं देख सकते हैं
- 24. MySQL में "व्यू" को कैसे डिज़ाइन किया जाए, जिसके परिणाम मैं देख रहे हैं?
- 25. लिंक से एसक्यूएल - अंतर्निहित कॉलम की लंबाई
- 26. क्या वसंत आवेदन में वसंत में 'सबकुछ' वसंत होना चाहिए?
- 27. लिनक्स में शैल अंतर्निहित कमांड क्या हैं?
- 28. वसंत प्रोग्रामेटिक लेनदेन प्रबंधन चेतावनी?
- 29. बाईपास आईई "वेबपृष्ठ आप देख रहे ..." पॉप अप
- 30. क्या वसंत बीन संदर्भ में कई अप्रयुक्त बीन्स महत्वपूर्ण संसाधनों को बर्बाद कर रहे हैं?
स्पष्टीकरण के लिए, मैं एसक्यूएल को '?' के साथ देखना चाहता हूं यह सुनिश्चित करने के लिए कि पूरी प्रक्रिया सही तरीके से काम करे। – Artem
हाय आर्टम, क्या आपने इसे अपने कोड में प्राप्त किया था? –