File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
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 REST with Spring (video course) this week in the Spring 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
jQuery in Action, 3rd edition