Groovy sql pour récupérer toutes les colonnes
-
29-10-2019 - |
Question
J'utilise Groovy SQL pour récupérer les résultats. Ceci est la sortie de ma boîte 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>
J'utilise du code 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
}
Mais ça me donne
Exception in thread "main" java.sql.SQLSyntaxErrorException: [abc][Sybase JDBC Driver]Invalid column name: run_value
Il est donc dit qu'il ne peut pas obtenir les colonnes spécialisées, y a-t-il un moyen de récupérer le résultat et l'affichage?
Mise à jour
J'ai utilisé le code ci-dessous
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
println row
}
Et ça me donne
[Parameter Name:number of open partitions , Default: 500, Memory Used: 5201, Config Value: 5000, Run Value: 5000, Unit:number , Type:dynamic ]
Comment puis-je avoir Run Value
? (depuis qu'il a un espace dedans)
row.Run Value
ne fonctionnera pas à coup sûr
La solution
Est-ce que ça marche? Interroger les méta-données pour le nom de la colonne et obtenir la valeur par index:
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
(1..row.getMetaData().columnCount).each {
println "${row.metaData().getColumnName( it )} = ${row[ it ]}"
}
}
Ou, pour obtenir la colonne directement
row.'Run Value'
Autres conseils
Une autre alternative est Getat (int). Dans votre cas, cela renverra la «valeur d'exécution»:
row.getAt(-3)
Additioannly à la réponse de @ tim_yates Je voudrais noter que row
a toRowResult()
méthode. Il permet d'obtenir une ligne simplement comme une carte. Pas besoin d'appeler getMetadata()
Si nous n'avons besoin que de noms de colonne ou de largeur de table.
sql.eachRow("sp_configure 'number of open partitions'"){ row ->
row.toRowResult().each(){ colName, value ->
println "${colName} = ${value}"
}
}
Ce code fait absolument la même chose mais semble beaucoup plus clair