Groovy Sql para obter todas as colunas
-
29-10-2019 - |
Pergunta
Eu estou usando Groovy Sql para buscar os resultados.Esta é a saída do meu 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>
Eu estou usando groovy código
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
}
mas ele me dá
Exception in thread "main" java.sql.SQLSyntaxErrorException: [abc][Sybase JDBC Driver]Invalid column name: run_value
Então, ele diz que não é possível obter o speciied colunas, existe uma maneira que ele pode buscar o resultado e exibição?
Atualização
Eu usei o código abaixo
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row
}
e ele me dá
[Parameter Name:number of open partitions , Default: 500, Memory Used: 5201, Config Value: 5000, Run Value: 5000, Unit:number , Type:dynamic ]
Como posso obter Run Value
?(uma vez que tem um espaço)
row.Run Value
não vai trabalhar para garantir
Solução
Isso funciona?Consultando os meta-dados para o nome da coluna e obter o valor do índice:
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
(1..row.getMetaData().columnCount).each {
println "${row.metaData().getColumnName( it )} = ${row[ it ]}"
}
}
Ou, para obter a coluna diretamente
row.'Run Value'
Outras dicas
Outra alternativa é getAt(int).No seu caso, isso irá retornar o "Executar" Valor de:
row.getAt(-3)
Additioannly para @tim_yates a resposta que eu gostaria de notar que row
tem toRowResult()
o método.Permite obter uma linha simplesmente como um Mapa.Não há necessidade de ligar getMetadata()
se nós só precisamos de nomes de coluna ou tabela de largura.
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
Este código, fazendo absolutamente o mesmo, mas parece muito mais claro