Erro ao excluir um documento do bd utilizando DAO

galera, alguem poderia me ajudar? não sei porque ocorre esse erro, pra mim está tudo ok, vou postar o código do DAO e a Action pra vcs me ajudarem.

DAO:

//EXCLUI DOCUMENTO
	public boolean excluiDocumento(Arquivo arquivo) throws SQLException {

			PreparedStatement stmt;
			stmt = connection.prepareStatement("select idfrente from arquivo where id=?");
			stmt.setInt(1, arquivo.getId());
			ResultSet rs = stmt.executeQuery();
			
			if(rs.next()){
				arquivo.getFrente().setId(rs.getInt("idfrente"));
								
				stmt = connection.prepareStatement("delete from frente where idfrente = ?");
				stmt.setInt(1, arquivo.getFrente().getId());
				stmt.execute();	
				
			}
			return false;
	}

Action

	//EXCLUI RELATÓRIO
	@Action(value="excluiRelatorio", results= {
			@Result(name="ok", location="/paginas/listaDocumentos.jsp")
			
	})
	
	public String execute7() throws Exception {
		new ControleDocumentosDAO().excluiDocumento(arquivo);
		mensagemErro = "DOCUMENTO EXCLUÍDO COM SUCESSO";
		return "ok";
			
	}

e o erro:

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException
	br.com.arquivo.DAO.ControleDocumentosDAO.excluiDocumento(ControleDocumentosDAO.java:347)
	br.com.arquivo.action.ControleDocumentosAction.execute7(ControleDocumentosAction.java:151)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
	com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
	com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
	org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
	org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
	org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.32 logs.

obrigado a todos

Debugue e veja o que chega nesta linha

java.lang.NullPointerException br.com.arquivo.DAO.ControleDocumentosDAO.excluiDocumento(ControleDocumentosDAO.java:347)

o amigo, sou novato, já tentei debugar projeto web uma vez e naada RS
eu mandei imprimir na tela e nem chega a imprimir o valor que eu pego do banco que seria o idfrente.

Então terá que aprender a debugar.
Me diga, qual é a linha 347 da classe ControleDocumentoDAO, o que tem nela?
Se for esta:

arquivo.getFrente().setId(rs.getInt("idfrente"));

Você precisa ter certeza que o atributo frente, retornado quando você invoca

arquivo.getFrente()

já foi instanciado

arquivo.setFrente(new Frente());

Pois, caso não seja, ele será nulo e, ao chamar o método

arquivo.getFrente().setId(rs.getInt("idfrente"));

Ele acusará o NPE do stackTrace.

Cara em momento nenhum vc esta passando o id para o sql.
O erro esta como vc construiu essa função aqui :[code]
//EXCLUI DOCUMENTO
public boolean excluiDocumento(Arquivo arquivo) throws SQLException {

		PreparedStatement stmt;
		stmt = connection.prepareStatement("select idfrente from arquivo where id=?");
		stmt.setInt(1, arquivo.getId());
		ResultSet rs = stmt.executeQuery();
		
		if(rs.next()){
			arquivo.getFrente().setId(rs.getInt("idfrente"));
							
			stmt = connection.prepareStatement("delete from frente where idfrente = ?");
			stmt.setInt(1, arquivo.getFrente().getId());
			stmt.execute();	
			
		}
		return false;
}

[/code]

como não? não entendi, poderia me mostrar o erro?

E só fazer um “teste de mesa” dessa sua função que vc vai entender o que eu e o drsmachado estamos falando.

[quote=david.cs20]Cara em momento nenhum vc esta passando o id para o sql.
O erro esta como vc construiu essa função aqui :[code]
//EXCLUI DOCUMENTO
public boolean excluiDocumento(Arquivo arquivo) throws SQLException {

		PreparedStatement stmt;
		stmt = connection.prepareStatement("select idfrente from arquivo where id=?");
		stmt.setInt(1, arquivo.getId());
		ResultSet rs = stmt.executeQuery();
		
		if(rs.next()){
			arquivo.getFrente().setId(rs.getInt("idfrente"));
							
			stmt = connection.prepareStatement("delete from frente where idfrente = ?");
			stmt.setInt(1, arquivo.getFrente().getId());
			stmt.execute();	
			
		}
		return false;
}

[/code][/quote]
De fato.
Ele está passando o objeto arquivo.
Veja que ele disse:

Se ele não imprime, o resultado do select não é obtido com sucesso.
O problema dele é outro.
Você pode ter tido essa impressão por ele passar o objeto de Arquivo. Este objeto vem da Action do Struts 2[code]//EXCLUI RELATÓRIO
@Action(value=“excluiRelatorio”, results= {
@Result(name=“ok”, location="/paginas/listaDocumentos.jsp")

})

public String execute7() throws Exception {
new ControleDocumentosDAO().excluiDocumento(arquivo);
mensagemErro = “DOCUMENTO EXCLUÍDO COM SUCESSO”;
return “ok”;

} [/code]

Entendeu?

Sei que é chato ficar explicando, mais como eu disse, sou iniciante mesmo, e pra piorar ainda fiquei parado 2 anos :stuck_out_tongue: então nem teste de mesa eu sei o que vc quer dizer RS
mais vou tentando aqui, o update funciona, é identico, só excluir que da esse erro.
abraços

drsmachado, a linha 347 é essa:
arquivo.getFrente().setId(rs.getInt(“idfrente”));

agora po, para atualizar o banco funciona normalmente, faço dessa mesma forma, agora pra excluir ta dando esse erro não sei porque, segue o que faco para atualizar o banco:

//ALTERA O DOCUMENTO
	public boolean alteraDocumento(Arquivo arquivo) throws SQLException {
		
		PreparedStatement stmt;
		
		stmt = connection.prepareStatement("update arquivo set numerocontrato=?, periodo1=?, periodo2=?, ano1=?, ano2=?, contrato=?, localArmazenamento=?, numeroArmazenamento=?, link=? where id=?");
		stmt.setString(1, arquivo.getNumerocontrato());
		stmt.setString(2, arquivo.getPeriodo1());
		stmt.setString(3, arquivo.getPeriodo2());
		stmt.setInt(4, arquivo.getAno1());
		stmt.setInt(5, arquivo.getAno2());
		stmt.setString(6, arquivo.getContrato());
		stmt.setString(7, arquivo.getLocalArmazenamento());
		stmt.setString(8, arquivo.getNumeroArmazenamento());
		stmt.setString(9, arquivo.getLink());
		stmt.setInt(10, arquivo.getId());
		stmt.executeUpdate();
		stmt.clearParameters();
		
		PreparedStatement stmt1;
		
		stmt1 = connection.prepareStatement("select idfrente from arquivo where id=?");
		stmt1.setInt(1, arquivo.getId());
		
		ResultSet rs2 = stmt1.executeQuery();
		
			if(rs2.next()) {
				arquivo.getFrente().setId(rs2.getInt("idfrente"));
				
				stmt1 = connection.prepareStatement("update frente set nomeFrente=? where idfrente = ?");
				stmt1.setString(1, arquivo.getFrente().getNomeFrente());
				stmt1.setInt(2, arquivo.getFrente().getId());
				stmt1.executeUpdate();
				stmt1.clearParameters();
			}
					
			PreparedStatement stmt3;
			
			stmt3 = connection.prepareStatement("select idservico from arquivo where id=?");
			stmt3.setInt(1, arquivo.getId());
			
			ResultSet rs3 = stmt3.executeQuery();
				
				if(rs3.next()) {
					arquivo.getServico().setId(rs3.getInt("idservico"));
					
					stmt3 = connection.prepareStatement("update servico set descricaoServico=?, palavraChave=?, palavraChave1=? where idservico = ?");
					stmt3.setString(1, arquivo.getServico().getDescricaoServico());
					stmt3.setString(2, arquivo.getServico().getPalavraChave());
					stmt3.setString(3, arquivo.getServico().getPalavraChave1());
					stmt3.setInt(4, arquivo.getServico().getId());
					stmt3.executeUpdate();
					stmt3.clearParameters();
					
				}
				
		return false;
		}

funciona que é uma blz…