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!
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!
If anyexceptions are there please post that
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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.
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
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;
}
ASKER
So, how do I find out if my driver supports that call and where to get one that does?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
>>So, how do I find out if my driver supports that call
See the link i posted
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
it would throw an exception if that was the problem :)
doubt thats the problem
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.
Post your code when you have it and I'll have a look at it for you.
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.
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);
}
>>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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.