Oracle ODBC erro no Driver

2 respostas
Alchemist

Boa Tarde pessoal.

Estou com um probleminha no driver do jdbc :

Exception in thread "main" java.lang.NullPointerException  
 at oracle.jdbc.driver.T4CTTIiov.unmarshalV10(T4CTTIiov.java:199)  
 at oracle.jdbc.driver.T4C8Oall.readIOV(T4C8Oall.java:592)  
 at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:291)  
 at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)  
 at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)  
 at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)  
 at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:104  
1)  
 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)  
 at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.j  
ava:3593)  
 at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java  
:3637)  
 at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStateme  
  
ntWrapper.java:1495)

Tenho um sistema Java 6 onde executamos rotinas batch, via crontab e scripts pearls, esporadicamente este erro acontece quando a rotina vai executar um insert qualquer, mas o erro não ocorre sempre, alguém já passou por isto ?

2 Respostas

Alchemist

Como niguém conseguiu me ajudar aqui, estou fazendo dois metodos para logar as Exception , o que vocês acham ? Qual informação a mais posso colocar para melhorar ?

public static void printException(Exception ex) throws SQLException {
		try {
			System.out.println("Message: " + ex.getMessage());
			ex.printStackTrace();
			Throwable t = ex.getCause();
			while (t != null) {
				System.out.println("Cause: " + t);
				t = t.getCause();
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR printException : " + e.getMessage());
			throw new SQLException(ex);
		}
	}
	
	public static void printSQLException(SQLException SQLEx, CursorState cursorState, String sql) throws SQLException {
		try {
			cursorState.print("Error SQL : " + currentDate());
			System.out.println("Query : " + sql);
			for (Throwable e : SQLEx) {
				if (e instanceof SQLException) {
					System.out.println("SQLState: "	+ ((SQLException) e).getSQLState());
					System.out.println("Error Code: " + ((SQLException) e).getErrorCode());
					System.out.println("Message: " + e.getMessage());
					e.printStackTrace(System.err);
					Throwable t = SQLEx.getCause();
					while (t != null) {
						System.out.println("Cause: " + t);
						t = t.getCause();
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR printSQLException : " + e.getMessage());
			throw new SQLException(SQLEx);
		}
	}

Usando:

try {

			rs=stmnt.executeQuery();
		} catch(SQLException sqlEx) {
			Util.printSQLException(sqlEx, this, sql); // primeiro log
			if (sqlEx.getErrorCode() == 1)  {
				app.GLB.setStatus("*****");
				cs_rowidValid = false;
				cs_rowid = null;
				stmnt.close();
				stmnt = null;
				Sql.sqlEt();
				return -1;
			} else {
				throw sqlEx;
			}
		} catch(Exception ex) {
			Util.printException(ex); // segundo log
			throw new SQLException(ex);
		}

Meu tratamento para o cause está correto ? Seria esta a melhor forma ?

Alchemist

Nenhuma opinião ? Nada assim ?

Criado 5 de novembro de 2013
Ultima resposta 19 de nov. de 2013
Respostas 2
Participantes 1