Groovy Sql لجلب كافة الأعمدة
-
29-10-2019 - |
سؤال
أنا أستخدم Groovy Sql لجلب النتائج.هذا هو الناتج من صندوق Linux الخاص بي.
%isql -U abc -P abc -S support
1> sp_configure 'number of open partitions'
2> go
Parameter Name Default Memory Used Config Value Run Value Unit Type
------------------------------ ----------- ----------- ------------ ------------ -------------------- ----------
number of open partitions 500 5201 5000 5000 number dynamic
(1 row affected)
(return status = 0)
1>
أنا أستخدم كود رائع
def sql = Sql.newInstance("jdbc:abc:sybase://harley:6011;DatabaseName=support;",dbuname,dbpassword,Driver)
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row.run_value
}
لكنه يعطيني
Exception in thread "main" java.sql.SQLSyntaxErrorException: [abc][Sybase JDBC Driver]Invalid column name: run_value
لذا تقول أنه لا يمكنه الحصول على الأعمدة المحددة، هل هناك طريقة لجلب النتيجة وعرضها؟
تحديث
لقد استخدمت الكود أدناه
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row
}
ويعطيني
[Parameter Name:number of open partitions , Default: 500, Memory Used: 5201, Config Value: 5000, Run Value: 5000, Unit:number , Type:dynamic ]
كيف يمكنني الحصول على Run Value
؟(لأنه يحتوي على مساحة)
row.Run Value
لن تعمل بالتأكيد
المحلول
هل هذا فعال؟الاستعلام عن البيانات الوصفية لاسم العمود والحصول على القيمة حسب الفهرس:
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
(1..row.getMetaData().columnCount).each {
println "${row.metaData().getColumnName( it )} = ${row[ it ]}"
}
}
أو للحصول على العمود مباشرة
row.'Run Value'
نصائح أخرى
البديل الآخر هو getAt(int).في حالتك، سيُرجع هذا "قيمة التشغيل":
row.getAt(-3)
بالإضافة إلى إجابة @ tim_yates أود أن أشير إلى ذلك row
لديه toRowResult()
طريقة.يسمح بالحصول على صف ببساطة كخريطة.لا حاجة للاتصال getMetadata()
إذا كنا بحاجة فقط إلى أسماء الأعمدة أو عرض الجدول.
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
يفعل هذا الرمز نفس الشيء تمامًا ولكنه يبدو أكثر وضوحًا