Pregunta

Estoy usando Groovy Sql para obtener resultados.Este es el resultado de mi máquina 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>

Estoy usando código maravilloso

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
    }

pero me da

Exception in thread "main" java.sql.SQLSyntaxErrorException: [abc][Sybase JDBC Driver]Invalid column name: run_value

Entonces dice que no puede obtener las columnas especificadas, ¿hay alguna manera de obtener el resultado y mostrarlo?

Actualizar

Usé el siguiente código

sql.eachRow("sp_configure 'number of open partitions'"){ row ->
            println row
    }

y me da

[Parameter Name:number of open partitions     , Default:        500, Memory Used:       5201, Config Value:        5000, Run Value:        5000, Unit:number              , Type:dynamic   ]

Como puedo conseguir Run Value?(ya que tiene un espacio en él)

row.Run Value no funcionará con seguridad

¿Fue útil?

Solución

¿Esto funciona?Consultando los metadatos para el nombre de la columna y obteniendo el valor por índice:

sql.eachRow("sp_configure 'number of open partitions'"){ row ->
  (1..row.getMetaData().columnCount).each {
    println "${row.metaData().getColumnName( it )} = ${row[ it ]}"
  }
}

o, para obtener la columna directamente

row.'Run Value'

Otros consejos

Otra alternativa es Getat (int).En su caso, esto devolverá el 'valor de ejecución':

row.getAt(-3)

Además de la respuesta de @tim_yates, me gustaría señalar que row tiene toRowResult() método.Permite obtener una fila simplemente como un Mapa.No es necesario llamar getMetadata() si solo necesitamos nombres de columnas o ancho de tabla.

sql.eachRow("sp_configure 'number of open partitions'"){ row ->
  row.toRowResult().each(){ colName, value ->
    println "${colName} = ${value}"
  }
}

Este código hace exactamente lo mismo pero parece mucho más claro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top