คำชี้แจงปัญหา:
อะไรคือวิธีที่ดีที่สุดในการรับสคีมาของคอลัมน์ในส่วนคำสั่งที่เลือก (ชื่อคอลัมน์, ประเภท) ของแบบสอบถามโดยใช้ java?
ตัวเลือก
ทางเลือกหนึ่งคือการเรียกใช้แบบสอบถามแล้วใช้ ResultSetMetadata เพื่อรับชื่อคอลัมน์และประเภท แต่ฉันไม่แน่ใจว่านี่จะเหมาะสมที่สุดหรือไม่เนื่องจากจะเรียกใช้แบบสอบถามทั้งหมด แม้ว่าจะมีข้อจำกัด clause ก็อาจยังคงเรียกใช้แบบสอบถามทั้งหมดก่อนที่ผลลัพธ์จะถูกจำกัด จะมีความแตกต่างด้านประสิทธิภาพระหว่างข้อความค้นหาที่มีและไม่มีข้อจำกัดหรือไม่
อีกทางเลือกหนึ่งคือตามลิงก์ เช่นการให้เท็จ เงื่อนไขในการสืบค้นและใช้ ResultSetMetaData
ตัวอย่างเช่น เลือก * จาก A โดยที่ 1=0;
มีวิธีอื่นใดที่ดีกว่าหรือตัวเลือก 2 ที่เหมาะสมที่สุดในทุกกรณีหรือไม่ เช่น ฉันอาจมีแบบสอบถามที่รวมหลายตาราง ตัวเลือกที่ 2 จะสมเหตุสมผลในกรณีนี้เช่นกันเมื่อฉันเพิ่มเงื่อนไขเท็จในตอนท้าย
หมายเหตุ: ต้องการโซลูชันสำหรับ DB2 และ SqlServer
แก้ไข: นอกจากนี้ลำดับในการดึงสคีมาจะตรงกับลำดับคอลัมน์ในข้อมูลหรือไม่ เช่น ถ้าฉันเลือก * จาก A สมมติว่าฉันได้ 5 คอลัมน์ คำสั่งซื้อนี้จะตรงกันหรือไม่เมื่อฉันได้รับสคีมาโดยใช้ ResultSetMetadata โดยใช้แบบสอบถามเดียวกัน
select *
ใน Java คุณควรเตรียมคำสั่งของคุณเสมอและระบุคอลัมน์ส่งคืนอย่างชัดเจน ด้วยวิธีนี้คุณไม่จำเป็นต้องตรวจสอบข้อมูลเมตาด้วยซ้ำ (ที่มา: blog.jooq.org/2013/08/12/) - person Stavr00   schedule 25.05.2016