2012-02-08 5 views
10

मैंने नेटबीन्स, ग्लासफ़िश और जावाडीबी का उपयोग कर डेटाबेस डेटाबेस बनाया है। अब मेरा नियंत्रक सर्वलेट कोड कुछ गतिशील एसक्यूएल प्रश्न निष्पादित करता है और एक परिणाम सेट वापस प्राप्त करता है (या मैं ToString करने के लिए आहंग कर सकते हैं)। अब, मैं एक सारणीबद्ध प्रारूप में लौटा परिणाम सेट कैसे दिखा सकता हूं (मुझे परिणाम सेट की संरचना के बारे में कोई जानकारी नहीं है)। क्या कोई इस बारे में मेरी मदद कर सकता है?एक सूची में अज्ञात राशि के साथ एक परिणामसेट मानचित्र को मानचित्र कैसे करें और इसे HTML तालिका में प्रदर्शित करें?

+0

कि समस्या क्या आप वास्तव में कर रहे हैं:

List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>(); ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); while (resultSet.next()) { Map<String, Object> columns = new LinkedHashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { columns.put(metaData.getColumnLabel(i), resultSet.getObject(i)); } rows.add(columns); } 

आप इस प्रकार JSP में यह प्रदर्शित कर सकते हैं? परिणाम सेट से पंक्तियों को प्राप्त करना? एक HTML टेबल उत्पन्न करना? हमें आपके पास कोड दिखाएं और हमें बताएं कि आप कहां फंस गए हैं। –

+0

@ जेबी निजेट, मेरे पास एक कोड है, - createStatement(); परिणामसेट आरएस = st.executeQuery (एसक्यूएल क्वेरी)। अब मैं यहाँ अटक गया हूँ। एचटीएमएल टेबल में यह परिणाम कैसे सेट करें। चूंकि मुझे क्वेरी के बारे में कोई जानकारी नहीं है, मुझे परिणाम सेट संरचना के बारे में कोई जानकारी नहीं है। – alessandro

+0

@ बलुससी, मैंने आपका reffered पृष्ठ देखा है। लेकिन, product.setId (resultSet.getLong ("id") लागू करने के लिए) - मुझे यह जानना है कि कितने कॉलम और कथन किस तालिका में लौट रहा है। मुझे इसका कोई अंदाजा नहीं है। – alessandro

उत्तर

33

आप Map<String, Object> का उपयोग "गतिशील" पंक्ति का प्रतिनिधित्व करने के लिए कर सकते हैं, जो iterable<c:forEach> में है। column count और column labels जैसे कॉलम के बारे में जानकारी एकत्र करने के लिए आप ResultSetMetaData का उपयोग कर सकते हैं।

तो, यह मानचित्रण करना चाहिए:

<table> 
    <thead> 
    <tr> 
     <c:forEach items="${rows[0]}" var="column"> 
     <td><c:out value="${column.key}" /></td> 
     </c:forEach> 
    </tr> 
    </thead> 
    <tbody> 
    <c:forEach items="${rows}" var="columns"> 
     <tr> 
     <c:forEach items="${columns}" var="column"> 
      <td><c:out value="${column.value}" /></td> 
     </c:forEach> 
     </tr> 
    </c:forEach> 
    </tbody> 
</table> 
+0

धन्यवाद। हालांकि, जेएसपी पेज में मैं परिणाम सेट नहीं देख सकता। मैंने जो किया वह निम्नानुसार है: request.setAttribute ("als", पंक्तियां) मेरे सर्वलेट में और जेएसपी में, पंक्तियां = session.getAttribute ("als"); क्या कुछ याद आ रही है? – alessandro

+0

बस '$ {als}' का उपयोग करें। जेएसपी फ़ाइल में जावा कोड न लिखें। आपकी गलती इस तरह से है कि आपने इसे एक अनुरोध विशेषता के बजाय सत्र attribtue के रूप में प्राप्त करने का प्रयास किया है। Http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files और http://stackoverflow.com/questions/3106452/how-do-servlets-work- पर पढ़ें तत्काल-सत्र-चर-और-multithreading – BalusC

+0

क्षमा करें, लेकिन मैं ऑब्जेक्ट पंक्तियां = request.getAttribute ("$ {als}") जोड़ता हूं। हालांकि यह दिखाता है कि पंक्तियों का उपयोग नहीं किया गया है। और समस्या एक ही रहती है। – alessandro

3

resultset मेटाडाटा का प्रयोग आदि

क्वेरी इन स्तंभों के प्रकार के द्वारा दिया स्तंभों की संख्या, पता करने के लिए the javadoc देखें, यह भी एक उदाहरण है जो।

+0

धन्यवाद। यह अच्छा है। – alessandro