Link to home
Start Free TrialLog in
Avatar of ftaco96
ftaco96

asked on

ResultSet.isBeforeFirst() not working in Java 6, WebLogic 10

My team is migrating our web application from WebLogic 8.1 to WebLogic 10.3. We have a whole bunch of places where we check for the presence of data in a ResultSet using rs.isBeforeFirst(). The code works on the old server (WLS 8.1, Java 1.4), but not on the new one (WLS 10.3, Java 6). They're both hitting the same Oracle 10g database.

Is there a bug somewhere I'm not aware of? Maybe a configuration variable I need to change? Could it be a jdbc driver issue?

Thanks!
Avatar of Gibu George
Gibu George
Flag of India image

If anyexceptions are there please post that
SOLUTION
Avatar of CEHJ
CEHJ
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of ftaco96
ftaco96

ASKER

We're already using it (in 440 different places) because sometimes we want to check whether there's data before we try to write it. If there's no data, we write out a "No records retrieved" line, for instance. if (rs.next()) moves to the first record, and then screws up the while (rs.next()).

We may not NEED it, but the fact is that we already have it everywhere in the code, and changing all the code is unfeasible.

If we can find the right driver, that would be preferable. We're looking at differences between our old and new environments driver-wise. If you have any suggestions, please let me know. We're connecting to Oracle 10 in both cases.
>>if (rs.next()) moves to the first record, and then screws up the while (rs.next()).

Well if you want to read it, then of course it would be as below.

See the following for checking out scrollability


http://www.exampledepot.com/egs/java.sql/CanSrs.html


boolean noResults = true;
while(rs.next()) {
    noResults = false;
} 

Open in new window

Avatar of ftaco96

ASKER

So, how do I find out if my driver supports that call and where to get one that does?
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
>>So, how do I find out if my driver supports that call

See the link i posted
> So, how do I find out if my driver supports that call and where to get one that does?

it would throw an exception if that was the problem :)
doubt thats the problem

Avatar of ftaco96

ASKER

Thanks guys! I'll look into it more tomorrow.
It may be that there was previously a bug (in java) which you were exploiting and now it has been fixed.
Post your code when you have it and I'll have a look at it for you.

Avatar of ftaco96

ASKER

Well, I don't see how we could be exploiting a bug, since we're using the method as it's documented.

I should mention that this code works in some places in the web app and breaks in other places. Not sure why.

> > Could it be a jdbc driver issue?
>
> not if you haven't changed the driver version

Actually, I believe the driver version did change. I think the driver was in the ojdbc14.jar file in WLS 8.1 but is in ojdbc6.jar in WLS 10.3. Please correct me if I'm wrong.

I attached a code snippet. I want to reiterate, though, that changing all the code is unfeasible, so I don't need to figure out an alternate way to do this.

public ArrayList getAudit(String monthYear, String orderBy)
   throws Exception {
  OracleCallableStatement stmt = null;
  ResultSet rs = null;
  ArrayList arrData = new ArrayList();
  DOAudit doAudit = null;
 
  DOAuditNotes doNotes = null;
 
  try {
    verifyConnection();
    String spcall = "{call PKG_AUDIT.SP_AUDIT_RESULTS(?,?,?)}";
    stmt = (OracleCallableStatement) con.prepareCall(spcall);
    stmt.registerOutParameter(1, OracleTypes.CURSOR);
    stmt.setString(2, monthYear);
    stmt.setString(3, orderBy);
 
    stmt.execute();
    rs = stmt.getCursor(1);
 
    if (rs.isBeforeFirst()) {
 
      while (rs.next()) {
        /*
          a lot of complicated code
        */
      }       
      arrData.add(doAudit); 
    } 
 
  } catch (Exception ex) {
    logger.error("getAudit", ex);
    throw ex;
  } finally {
	ReleaseResources.release(con, stmt, rs);
	rs = null;
	stmt = null;
	con = null;
  }
  return(arrData);
}

Open in new window


>>I should mention that this code works in some places in the web app and breaks in other places. Not sure why.

Could be that different drivers are being loaded in different parts
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial