Yep, of course you're right. I was assuming my select() method would always return a List, but that's dependent on the ResultSetHandler.
Thanks very much, jim -----Original Message----- From: David Graham [mailto:[EMAIL PROTECTED] Sent: Tuesday, June 22, 2004 3:36 PM To: Jakarta Commons Users List Subject: RE: [DbUtils] ClassCastException It looks like you're trying to cast a Map returned from run.query() to a List. As another person said, Object.getClass() will tell you what class any object reference is. However, you don't really need that, you just need to cast the result to a Map :-). David --- "Anderson, James H [IT]" <[EMAIL PROTECTED]> wrote: > Hi David, > > Sorry about the mixup. Here's the routine with line 143 marked: > > /** > select with multiple params > */ > public static List select(String query, Object[] param, > ResultSetHandler h, boolean commit) > throws Exception { > > Connection conn = null; > List result = null; > > try { > conn = RecomDataSource.getConnection(); > QueryRunner run = new QueryRunner(); > result = (List) run.query(conn, query, param, h); // Line > 143 > } catch (Exception e) { > System.out.println(e.getMessage()); > e.printStackTrace(); > throw e; > } finally { > if (commit) { > > org.apache.commons.dbutils.DbUtils.commitAndCloseQuietly(conn); > } else { > org.apache.commons.dbutils.DbUtils.closeQuietly(conn); > } > } > > return result; > } > > I can see where the problem is likely to be on my side. Unfortunately > I'm having some problems with connectivity to the database at the moment > and probably won't be able to try your suggestion with the debugger > until tomorrow. I'm still a little new to java, so let me ask you this. > Clearly the result being returned by query() is not a List and hence the > ClassCastException, but how can I determine at runtime what type of > object it is? Must I do a bunch of instanceof tests, or is there a > cleaner way? > > Thanks, > > jim > > > -----Original Message----- > From: David Graham [mailto:[EMAIL PROTECTED] > Sent: Tuesday, June 22, 2004 12:49 PM > To: Jakarta Commons Users List > Subject: Re: [DbUtils] ClassCastException > > > You originally posted this to commons-dev and I replied :-). Here it > goes > again... > > What does your DbUtil line 143 look like? When you pause at that line > in > your debugger, what class are you getting back and what class are you > trying to cast to? > > David > > --- "Anderson, James H [IT]" <[EMAIL PROTECTED]> wrote: > > (This is a resend of a msg I sent yesterday which I did not see appear > > on the list. In fact, I haven't received any mail from the list for a > > day or two...) > > > > I'm getting a ClassCastException that I don't understand. I hope > someone > > can help with this, because I'd very much like to be able to use > DbUtil > > on my project! > > > > The stack trace: > > > > org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap > > java.lang.ClassCastException: > > org.apache.commons.dbutils.BasicRowProcessor$CaseInsensitiveHashMap > > at com.ssmb.recom.aft.access.DbUtil.select(DbUtil.java:143) > > at > com.ssmb.recom.aft.access.DbUtil.selectOneMapTrimmed(DbUtil.java:66) > > at > > > com.ssmb.recom.aft.datamanager.AftRequests.nextBusinessDate(AftRequests.java:3454) > > at > > > com.ssmb.recom.aft.datamanager.AftRequests.nextBusinessDateAfter(AftRequests.java:3489) > > at > > com.ssmb.recom.aft.datamanager.AftRequests.main(AftRequests.java:2920) > > > > The invoking code: > > > > java.sql.Date sqlDate = new java.sql.Date( date.getTime() ); > > > > String selectTradingDate = "select trading_date from > trade_days > > where trading_date >= ? and banking_day = 'B'"; > > > > Object[] params = { sqlDate }; > > boolean commit = true; > > > > Map h = null; > > try { > > h = (Map) DbUtil.selectOneMapTrimmed(selectTradingDate, > > params, commit); > > } catch (Exception e) { > > logger.error("No trade date >= " + date, e); > > throw new RuntimeException(e.getMessage()); > > } > > java.util.Date tradeDate = (java.util.Date) > > h.get("trading_date"); > > > > > > My wrapper code as invoked in the code, above: > > > > package com.ssmb.recom.aft.access; > > > > import java.sql.*; > > import java.util.*; > > import org.apache.commons.dbutils.*; > > import org.apache.commons.dbutils.handlers.*; > > import org.apache.commons.dbutils.wrappers.*; > > import org.apache.commons.beanutils.BeanUtils; > > > > import com.ssmb.recom.datamgr.RecomDataSource; > > > > public class DbUtil { > > > > [...] > > > > /** > > select one row, set param=null to avoid parameter substitution > > */ > > public static Object selectOneMapTrimmed(String query, Object[] > param, > > boolean commit) > > throws Exception { > > > > MapHandler h = new MapHandler() { > > public Object handle (ResultSet rs) throws > > SQLException { > > StringTrimmedResultSet wrapped = new > > StringTrimmedResultSet(rs); > > rs = > > ProxyFactory.instance().createResultSet(wrapped); > > Object returnVal = null; > > try { > > returnVal = super.handle(rs); > > } catch (SQLException e) { > > System.out.println(e.getMessage()); > > throw e; > > } > > return returnVal; > > } > > }; > > > > if (param == null) { > > return select(query, h, commit); > > } else { > > return select(query, param, h, commit); > > } > > } > > > > [...] > > > > } > > > > The table being queried: > > > > table database creator created > > ------------------ ---------- ---------- ---------- > > trade_days db2tst08 vimdbat 06/20/2000 > > > > column type length scale nulls > > ------------------ -------- ------ ----- ----- > > trading_date date 4 0 y > > trading_day char 1 0 y > > trading_dow smallint 2 0 y > > banking_day char 1 0 y > > -------------------- > > > > > > Note: > > > > When I execute this query using vanilla JDBC, everything works fine. > > > > Any help appreciated, > > > > jim > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > === message truncated === __________________________________ Do you Yahoo!? New and Improved Yahoo! Mail - 100MB free storage! http://promotions.yahoo.com/new_mail --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
