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>
.
Я использую код Groovy
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)
Additiiteiabannly to @ Ответ @ Tim_yates Я хотел бы отметить, что row
имеет метод GenaCodicetacode.Это позволяет получить ряд просто как карту.Не нужно вызывать toRowResult()
, если нам нужны только имена столбцов или ширина таблицы.
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
.
Этот код делает абсолютно одинаково, но выглядит намного более понятно