MySQLIntegrityConstraintViolationException ? [RESOLVIDO]

5 respostas
M

Alguém saberia alguma forma de tratar esse erro em um “try” comum ?

} catch (com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException ex) {
			LOG.error(ex.getMessage(), ex);
			return "10";
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`diginet`.`tbl_employee_device_task`, CONSTRAINT `fk_tbl_employee_device_task_tbl_device1` FOREIGN KEY (`device_id`) REFERENCES `tbl_device` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	at com.mysql.jdbc.Util.getInstance(Util.java:384)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364)
	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:62)
	at $Proxy54.execute(Unknown Source)
	at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
	at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
	at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
	... 52 more

5 Respostas

D
catch(Exception e){}

Não funciona?

M

drsmachado:
catch(Exception e){}
Não funciona?

“Funciona” , porém preciso de algo assim :

} catch (com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException ex) {
			LOG.error(ex.getMessage(), ex);
			return "10";	
			
		} catch (Exception e) {
			LOG.error(e.getMessage(), e);
			return "1";
		}

Ele me retorna isso :

Unreachable catch block for MySQLIntegrityConstraintViolationException. This exception is never thrown from the try statement body

Agradeço a resposta !

D
catch(Exception e){
  if(e instanceof com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException){
 //TODO fazer algo
}
//TODO fazer outro algo
}

A exception de integridade não está diretamente associada a um evento do try/catch, visto que, você está trabalhando com os objetos oriundos do java (provável que a Connection, o Statement/PreparedStatement e ResultSet sejam do pacote java.sql e não do com.mysql.jdbc)

M

Obrigado, sua resposta ajudou bastante, mas fiz algo um pouco diferente.

1 - Fiz um select na base em busca do indice em tabelas com Foreign Key
2 - Retornei o Objeto
3 - Se o objeto não for nulo lanço :

throw new Exception("Existem registros em outras tabelas")

Funcionou, não sei se é a melhor alternativa

D

Metaleiro:
Obrigado, sua resposta ajudou bastante, mas fiz algo um pouco diferente.

1 - Fiz um select na base em busca do indice em tabelas com Foreign Key
2 - Retornei o Objeto
3 - Se o objeto não for nulo lanço :

throw new Exception("Existem registros em outras tabelas")

Funcionou, não sei se é a melhor alternativa

Funcionou = melhor alternativa

Criado 6 de dezembro de 2011
Ultima resposta 7 de dez. de 2011
Respostas 5
Participantes 2