Thread: JDBC question: Which class is returned?
I am doing some queries using JDBC. I use the ResultSet.getObject() method to get the result object. This works fine with SQL VARCHAR, etc, but there is a big problem when I try it with an INT4. For example: Object obj = result.getObject(i); It gets the object just fine but then I can't do anything with the object. I can't do this: System.out.println("The result is: " + (String) obj); or anything else. I am guessing that the problem may be that it is trying to return an integer type, which is not an object. Any sugestions on this? One thing I think I could do is to try to detect the type using MetaData.getResultType() or something, and then call ResultSet.getInt() or whatever is appropriate. Is this the best way to do it? Thanks
On Fri, Oct 12, 2001 at 08:30:02PM -0000, Dr. Evil wrote: > > I am doing some queries using JDBC. I use the ResultSet.getObject() > method to get the result object. This works fine with SQL VARCHAR, > etc, but there is a big problem when I try it with an INT4. > > For example: > > Object obj = result.getObject(i); > > It gets the object just fine but then I can't do anything with the > object. I can't do this: > > System.out.println("The result is: " + (String) obj); > > or anything else. I am guessing that the problem may be that it is > trying to return an integer type, which is not an object. Any > sugestions on this? > > One thing I think I could do is to try to detect the type using > MetaData.getResultType() or something, and then call > ResultSet.getInt() or whatever is appropriate. Is this the best way > to do it? > > Thanks The reason you can't cast it to a string is because it will be class Integer if the col type is int. Integer val = (Integer)result.getObject(i); This is how to do what you want to do. Object obj = result.getObject(i); System.out.println("The result is: " + obj.toString()); If the .getObject() is messing you up there are a wide number of other functions to use like getString() that will convertthe return type for you. Orion
At 20:30 12/10/2001 +0000, Dr. Evil wrote: >I am doing some queries using JDBC. I use the ResultSet.getObject() >method to get the result object. This works fine with SQL VARCHAR, >etc, but there is a big problem when I try it with an INT4. > >For example: > >Object obj = result.getObject(i); > >It gets the object just fine but then I can't do anything with the >object. I can't do this: > >System.out.println("The result is: " + (String) obj); No, this won't work as not all Objects returned are Strings. The correct thing to do here is: System.out.println("The result is: " + obj.toString() ); Which will work as all objects have the toString() method. >or anything else. I am guessing that the problem may be that it is >trying to return an integer type, which is not an object. Any >sugestions on this? Not possible. The int/long/double entities are not objects, so in this case can never be returned. The driver should be wrapping them in Integer/Long/Double objects instead. >One thing I think I could do is to try to detect the type using >MetaData.getResultType() or something, and then call >ResultSet.getInt() or whatever is appropriate. Is this the best way >to do it? That is an alternative, but the getObject() call should work. Peter
It should be returning an Integer object. In a brief look at the source code it seems to be doing the correct thing. What version are you using? Also I noticed your example below: System.out.println("The result is: " + (String) obj); This shouldn't work. You can't cast any random object to a String. I think what you want is: System.out.println("The result is: " + obj.toString()); thanks, --Barry Dr. Evil wrote: > I am doing some queries using JDBC. I use the ResultSet.getObject() > method to get the result object. This works fine with SQL VARCHAR, > etc, but there is a big problem when I try it with an INT4. > > For example: > > Object obj = result.getObject(i); > > It gets the object just fine but then I can't do anything with the > object. I can't do this: > > System.out.println("The result is: " + (String) obj); > > or anything else. I am guessing that the problem may be that it is > trying to return an integer type, which is not an object. Any > sugestions on this? > > One thing I think I could do is to try to detect the type using > MetaData.getResultType() or something, and then call > ResultSet.getInt() or whatever is appropriate. Is this the best way > to do it? > > Thanks > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster > >