2012-03-23 9 views
6

लौटा दी हैं। मैंने आईएसक्ल पर मैन्युअल रूप से निष्पादित किए गए कथन की जांच की और सभी पंक्तियां सही ढंग से लौट आईं। बयान जो JDBC पर निष्पादित हो रहा है:कोई पंक्ति डाटाबेस से लौटे - लेकिन वहाँ रिकॉर्ड मैं JDBC Sybase ड्राइवर (<code>jconn3</code>) का उपयोग कर के साथ बयान चयन को क्रियान्वित कर रहा हूँ

select * from mytable where date between ? and ? 

मैं yyyy-MM-dd HH:mm:ss रूप DateFormat जोड़ा गया है और 00:00:00 के रूप में समय मान सेट अंतिम तिथि तक के लिए तिथि और 23:59:59 शुरू करते हैं।

यह काम नहीं कर रहा। पंक्ति संख्या 1000 चाहिए, लेकिन यह 770 कभी कभी कभी कभी कभी कभी 990 564 आदि है, .. कोई किसी भी विशिष्ट पंक्ति संख्या जो हर वापस लौटा है।

उसके बाद मैं एक अतिरिक्त निष्पादन जो केवल पंक्ति संख्या देता है जोड़ा। सबसे पहले मैं select count(*) from ... बयान तो select * from .... और अब क्रियान्वित करने को क्रियान्वित कर रहा हूँ `* चयन से ... क्वेरी हर रिकॉर्ड की सही संख्या देता है। यह कैशिंग से संबंधित नहीं हो सकता है। और अजीब बात यह है कि, मैं उन दो निष्पादन के लिए एक ही तैयार किए गए और परिणाम वस्तु का उपयोग कर रहा हूं।

कि इस मुद्दे पर कोई विचार?

@Rulmeq, यहाँ कोड (2012-03-29 पर जोड़ा)

ResultSet rs = null; 
PreparedStatement ps = null; 

ps = myConn.getConnection().prepareStatement("select count(*) from myTable where date between ? and ?"); 
ps.setDate(1, new java.sql.Date(beginDate.getTime())); // format : yyyy-MM-dd 
ps.setDate(2, new java.sql.Date(endDate.getTime())); // format : yyyy-MM-dd 
rs = ps.executeQuery(); 
rs.next(); 
// some logs here 

ps = myConn.getConnection().prepareStatement("select * from myTable where date between ? and ?"); 
ps.setTimestamp(1, new java.sql.Timestamp(beginDate.getTime())); // format : yyyy-MM-dd hh:mm:ss 
ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime())); // format : yyyy-MM-dd hh:mm:ss 
rs = ps.executeQuery(); 
while(rs.next()){ 
    ........ 
} 
+1

हमें अपने कोड दिखाएं। – Goibniu

+0

@ रूल्मेक, मैंने प्रश्न में कोड जोड़ा। – Aykut

+1

आप अपने कोड में BeginDate और ENDDATE के अपने इन्स्टेन्शियशन (परिभाषा) शामिल हो सकते हैं। वे यहां कुंजी हैं। –

उत्तर

0

सभी लेकिन जारी करने के लिए धन्यवाद हल किया गया है और यह JDBC के साथ संबंधित नहीं था। यह System.currentTimeMillis() का उपयोग करने से संबंधित था और होस्ट सिस्टम बहुत तेज़ है। यही कारण है कि सिस्टम कभी भी एक ही एमएस का उपयोग करता है। मैंने संदर्भ बदल दिए।

2

मैं क्या लगता है कि समस्या कोड आप क्वेरी तर्कों को datetime मान निर्दिष्ट का उपयोग कर रहे है। और अब आप निर्दिष्ट के रूप में उस के साथ कोड "से चयन * ..." ठीक काम कर रहा है, इसलिए मुझे लगता है कि उन दोनों के बीच फर्क सिर्फ इतना है कि आप "से चयन गणना (*) के लिए

ps = myConn.getConnection().prepareStatement("select Count(*) from myTable where date between ? and ?"); 
ps.setTimestamp(1, new java.sql.Timestamp(beginDate.getTime())); 
ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime())); 
rs = ps.executeQuery(); 

उपयोग कर सकते हैं। । "

+0

@ शनबाज़, यह एक समाधान नहीं है लेकिन आपने अच्छी तरह से विश्लेषण किया है। धन्यवाद। – Aykut

0

ओरेकल TO_DATE के समारोह में नीचे की तरह मदद मिलेगी।

"select count(*) from myTable where date between TO_DATE(?, 'yyyy-mm-dd') and TO_DATE(?, 'yyyy-mm-dd')" 
+0

Thx लेकिन हम sybase ase का उपयोग कर रहे हैं – Aykut

1

क्या तारीख को डेटटाइम में डेट, टाइमटाइम, स्मालल्डटाइम या टाइमस्टैम्प के रूप में परिभाषित किया गया है? आप setDate और setTimestamp का उपयोग कर रहे हैं। उनमें से एक myTable में परिभाषित दिनांक प्रकार से मेल नहीं खाता है।

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