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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top