Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Operation interrupted SQLException

32 views
Skip to first unread message

Chanchal

unread,
Mar 29, 2010, 5:45:37 AM3/29/10
to
Hello All,

I'm getting the following exception sporadically

java.sql.SQLException: Io exception: Operation interrupted
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
at
oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
309)
at DBManager.getQueue(DBManager.java:200)

This happens in the following code

public static List getQueue(Connection connection){
List queueEntries = new ArrayList();

PreparedStatement pStmt = null;
ResultSet rs = null;
try{

pStmt = connection.prepareStatement(qSql);
rs = pStmt.executeQuery();
while(rs.next()){
QueueEntry qe = new QueueEntry();
qe.setQueueEntryId(rs.getLong(1));
qe.setEventId(rs.getLong(2));
qe.setOid(rs.getLong(3));
String value = rs.getString(5);
if(value == null){
qe.setValue("");
}else{
qe.setValue(value);
}
queueEntries.add(qe);
}
rs.close();
pStmt.close();

}catch(Exception e){
cat.error("CATCH "+getStackTrace(e));
queueEntries = null;
}finally {
try {
if(rs != null){
rs.close();
}
if(pStmt != null){
pStmt.close();
}

} catch (SQLException e) {
cat.error("FINALLY "+getStackTrace(e));
}
}

return queueEntries;
}

Any clue on what could be causing this exception would be of much help

Thanks and Regards

Chanchal

John B. Matthews

unread,
Mar 29, 2010, 1:29:09 PM3/29/10
to
In article
<4132a4c6-f100-4643...@z11g2000yqz.googlegroups.com>,
Chanchal <chancha...@gmail.com> wrote:

> Hello All,
>
> I'm getting the following exception sporadically
>
> java.sql.SQLException: Io exception: Operation interrupted
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
> at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
> at
> oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
> 309) at DBManager.getQueue(DBManager.java:200)
>
> This happens in the following code
>

> [Code, including whichever line was 200, omitted]


>
> Any clue on what could be causing this exception would be of much help

Errors that occur "sporadically" always makes me think of incorrect
synchronization. I'm guessing the error occurs on line 200 of
DBManager.java. Does e.getNextException() have anything to add?

...
} catch(SQLException e) {
while (e != null) {
System.err.println ("Message: " + e.getMessage() + "");
System.err.println ("SQLState: " + e.getSQLState () + "");
System.err.println ("ErrorCode: " + e.getErrorCode() + "");
e = e.getNextException();
System.err.println();
}
}

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>

Lew

unread,
Mar 29, 2010, 3:35:33 PM3/29/10
to
Chanchal wrote:
>> I'm getting the following exception sporadically
>
>> java.sql.SQLException: Io exception: Operation interrupted
>>    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
>>    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
>>    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
>>    at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1099)
>>    at
>> oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:
>> 309) at DBManager.getQueue(DBManager.java:200)
>
>> This happens in the following code
>
>> [Code, including whichever line was 200, omitted]
>

I note in that code that the PreparedStatement and ResultSet are
closed twice. This is one reason I avoid the idiom wherein the
variables are initialized to 'null' and then again to the actual
reference. I prefer a variation on RAII ("Resource Acquisition is
Initialization"), which I shall also call "DIRTY" ("Dispose In
Resource Try-finallY"), which uses multiple try-finally blocks to
guarantee disposal of a resource declared 'final'. (Example at end of
post.)

John makes the very good point that if you don't give us much
information, we cannot give very much help. So, which line was line
200?

>> Any clue on what could be causing this exception would be of much help
>

John B. Matthews wrote:
> Errors that occur "sporadically" always makes me think of incorrect
> synchronization. I'm guessing the error occurs on line 200 of
> DBManager.java. Does e.getNextException() have anything to add?
>
>     ...
>     } catch(SQLException e) {
>       while (e != null) {
>         System.err.println ("Message:   " + e.getMessage() + "");
>         System.err.println ("SQLState:  " + e.getSQLState () + "");
>         System.err.println ("ErrorCode: " + e.getErrorCode() + "");
>         e = e.getNextException();
>         System.err.println();
>       }
>     }
>

The database might be closing the connection from its end, or the
calling code might be closing the connection concurrently with the
ResultSet action.

OP, read, study and follow the advice of
<http://sscce.org/>

DIRTY template:

public void doSomething()
{
final PreparedStatement pStmt;
try
{
pStmt = cxn.prepareStatement( query );
}
catch ( SQLException sqex )
{
final String msg = "Cannot create statement. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg, sqex );
logger.error( msg, sqex );
throw nex;
}
assert pStmt != null;

try // all use of 'pStmt' is in this 'try' block
{
ResultSet rs = pStmt.executeQuery();
while ( rs.next() )
{ ... }
}
catch ( SQLException sqex )
{
final String msg = "Cannot handle query. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg, sqex );
logger.error( msg, sqex );
throw nex;
}
finally
{
try
{
pStmt.close();
}
catch ( SQLException sqex )
{
final String msg = "Cannot close statement. SQLState = {"
+ sqex.getSQLState() +"}. "+ sqex.getLocalizedMessage();
IllegalStateException nex = new IllegalStateException( msg,
sqex );
logger.error( msg, sqex );
throw nex;
}
}
}

--
Lew

Kevin McMurtrie

unread,
Mar 29, 2010, 9:13:51 PM3/29/10
to
In article <nospam-B80F6D....@news.aioe.org>,

That looks like an old JVM bug. Java 1.3 or 1.4? If so, upgrade to
1.6. Skip 1.5 because it has CMS GC and HotSpot bugs that will bite in
enterprise environments.
--
I won't see Google Groups replies because I must filter them as spam

0 new messages