आप एक अंतर्निहित वर्ग एक साथ एक अंतर्निहित CanBuildFrom
साथ इस्तेमाल कर सकते हैं कर सकते हैं। इसलिए यदि आप map
सीधे पसंद करते हैं
import MyResultSetContainer._
val rs = stmnt.executeQuery("select * from pg_user")
val names = for (row <- rs) yield (row.getString(1))
println(names)
rs.close()
समझ के लिए
map
का उपयोग करता है हुड के नीचे,: यह एक परिवर्तनशील निर्माता का उपयोग करता है, लेकिन फोन करने वाले का पक्ष में नहीं:
object MyResultSetContainer {
implicit class MyResultSet(rs: ResultSet) {
def map[T, C <: Iterable[T]](f: (ResultSet) => T)
(implicit cbf: CanBuildFrom[Nothing, T, C]): C = {
val builder = cbf()
while (rs.next()) {
builder += f(rs)
}
builder.result()
}
}
}
इस तरह इस्तेमाल किया जा रहा:
val names = rs.map(row => row.getString(1))
जो अनुक्रम उत्पन्न करता है। CanBuildFrom
के लिए धन्यवाद आप एक प्रकार स्पष्ट रूप से उपलब्ध कराने के द्वारा और साथ ही अन्य संग्रह का उत्पादन कर सकते हैं:
val names: List[String] = rs.map(row => row.getString(1))
कैसे CanBuildFrom
काम करता है? स्कैला कंपाइलर इस अभिव्यक्ति में शामिल प्रकारों को देखता है: परिणामी प्रकार है, और मानचित्र द्वारा बुलाए गए फ़ंक्शन द्वारा लौटाया गया प्रकार है। इस जानकारी के आधार पर, स्कैला कंपाइलर एक कारखाना निहित रूप से प्रदान करता है जिसका उपयोग उपयुक्त निर्माता बनाने के लिए किया जा सकता है। इसलिए आपको विभिन्न प्रकार के संग्रहों का उत्पादन करने के लिए केवल एक विधि की आवश्यकता है।
आप एक से अधिक मान वापस जाने के लिए चाहते हैं, सिर्फ एक टपल वापसी:
val columns = rs.map(row => (row.getInt(2), row.getString(1)))
और टपल बनाने के लिए इस्तेमाल किया जा सकता है एक Map
सीधे:
val keyNamesMap: Map[Int, String] =
rs.map(row => (row.getInt(2), row.getString(1)))
यह विचार पर आधारित है कि परिणाम सेट पंक्तियों की एक सूची है, और इसलिए map
फ़ंक्शन इसके शीर्ष पर उपलब्ध होना चाहिए। निहित वर्ग का उपयोग अंतर्निहित परिणाम सेट पर map
विधि जोड़ने के लिए किया जाता है।
वास्तव में मुहावरेदार स्कैला में यह 'val rs = stmt.executeQuery() जैसा दिखता है; वैल परिणाम = के लिए (आर <- आरएस) उपज r.getInt (1) '(केवल एक छद्म कोड, यदि आप करेंगे) –
आप इस पोस्ट को देखना चाहते हैं: http://stackoverflow.com/questions/2102662/scala-exposing-a-jdbc-resultset-through-a-generator-iterable/15950556 # 15950556 –
यदि आप स्कैला में LINQ- जैसे प्रश्नों की तलाश में हैं, तो [Slick] (http: // slick] पर एक नज़र डालें। typesafe.com/) –