Meaningless Drivel is fun!
The moose likes Groovy and the fly likes groovy sql confusion Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of OCA Java SE 8 Programmer I Study Guide this week in the OCAJP 8 forum!
JavaRanch » Java Forums » Languages » Groovy
Bookmark "groovy sql confusion" Watch "groovy sql confusion" New topic

groovy sql confusion

Dave Brown
Ranch Hand

Joined: Mar 08, 2005
Posts: 301
Hi All,

Curious as to whether anyone has seen this issue before or can at least tell me why its happening.

I have a sql query being executed in a groovy Service class which returns 3 columns. When I execute the identical query within mysql I get the results I expect, however in my app, the 3rd column somehow is being returned as an array and not a float/double.

I am always expecting only one row, so the code in my app is :

def sql = new Sql(dataSource)
def row = sql.firstRow(query)

where query is :

String query =
" MAX(cl.good) - MIN(cl.good) as 'good'," +
" MAX(cl.bad) - MIN(cl.bad) as 'poor', " +
"(MAX(cl.bad) - MIN(cl.bad)) / (MAX(cl.good) - MIN(cl.good)) * 100 as ratio "+
"FROM logs cl "+
"WHERE = " + id + " AND cl.date_created > (NOW() - INTERVAL 1 hour)"

an example of the results in the app (from a println) is
row = [good:59768255, poor:4113235, ratio:[54, 46, 56, 56, 50, 48]]

whereas the same in mysql is

good poor ratio
59768255 4113235 6.8820

it looks like ratio is coming back as a char array and not just the value

Has anyone else seen this before ?



Regards, Dave Brown
SCJP 6 - [url][/url] - Check out Grails Forum
Dave Brown
Ranch Hand

Joined: Mar 08, 2005
Posts: 301
Further to the behaviour above, it can easily be replicated with a an ever so simple query such as :

which will output ["floatValue":[51, 46, 50, 51, 50, 51]]

So I still don't understand why it returns a byte array rather than a float or a double but the way around I've used is just to create a new String() based on the column, as ultimately I needed a string anyway, e.g.

new String(row.floatValue)

I agree. Here's the link:
subject: groovy sql confusion
It's not a secret anymore!