Problema com Variáveis no Servlet

7 respostas
marciocamurati

E ai !

Estou com um problema ao re-executar um Servlet, seguinte tenho um Servlet que faz uma conexão com o banco de dados e grava algumas coisas em variáveis que são usadas, e depois exibe uma mensagem na tela, até ai tudo bem, o problema é que se executo uma vez perfeito mas na hora de re-executar as variáveis não pegam os novos valores que o select retorna e sim os do primeiro select.

Alguém sabe oq está acontecendo ?

[]s

7 Respostas

raguiar

Vc esta fazendo o select no metodo init() do servlet ???
Poste o codigo para a gente olhar ???

kuchma

marciocamurati:
Estou com um problema ao re-executar um Servlet, seguinte tenho um Servlet que faz uma conexão com o banco de dados e grava algumas coisas em variáveis que são usadas, e depois exibe uma mensagem na tela, até ai tudo bem, o problema é que se executo uma vez perfeito mas na hora de re-executar as variáveis não pegam os novos valores que o select retorna e sim os do primeiro select.

Alguém sabe oq está acontecendo ?

Pela tua descricao acho que podem ser duas coisas: ou voce realmente nao esta armazenando os dados nas variaveis corretamente ou voce esta utilizando variaveis de instancia (atributos de classe) de maneira inadequada em servlets (servlets nao sao thread-safe).

Marcio Kuchma

marciocamurati

Vai o código ai, e no init() estou iniciando a conexão com banco.

private String pedido;
private Connection conn;
private String stringRazao, stringDoc, stringLogradouro;
private int intNumero;

public void init()	{	
	conectarMysql();
}

public void destroy()	{	
	desonectarMysql();
}

public void recuperarDadosPagamento(Connection conn,String pedido)	{
	try {
		Statement stmt = conn.createStatement();

		ResultSet rsPagamento = stmt.executeQuery("SELECT teste.*, teste2.* FROM teste INNER JOIN teste2 ON teste.id = teste2.id WHERE teste.idfinanceiro = " + pedido + "");
		rsPagamento.next();
		
		stringRazao 		= rsPagamento.getString("razao");
		stringDoc 			= rsPagamento.getString("doc");
		stringLogradouro 	= rsPagamento.getString("logradouro");
		intNumero 			= rsPagamento.getInt("numero");
	} catch (SQLException ex) {		}
}

Se alguém puder me ajudar, tá ai os pedaços do código.

marciocamurati

Isso que o kuchma pode estar ocorrendo pois este é meu primeiro servlet, então estou fazendo e aprendendo ao mesmo tempo.

[]s

danieldestro

Nunca use atributos de classe para guardar valores que são relativos a um request ou sessão de usuário.

marciocamurati

Mexi bastante no código mas continuo tendo aquele problema parece um cache a desgraça quando acesso a primeira vez perfeito mas se vou no banco e altero os valores nda, ele continua com os antigos, estou postando abaixo o objeto que faz realiza a coleta dos dados do DB.

class SqlActions {
	public String stringRazao 		= null;
	public String stringDoc 		= null;
	public String stringLogradouro 	= null;
	public String stringComplemento = null;
	public String stringBairro 		= null;
	public String stringCidade 		= null;
	public String stringEstado 		= null;
	public String stringCep 		= null;
	public String stringDescricao 	= null;
	public Date dateDataEmissao 	= null;
	public int intNumero 			= 0;
	public int intStatus 			= 0;
	public float floatValor 		= 0; 
	public float floatMulta 		= 0;
	public float floatJuros 		= 0;

	public void recuperarDadosPagamento(Connection conn,String pedido)	{
		try {
			Statement stmt = conn.createStatement();

			ResultSet rsPagamento = stmt.executeQuery("SELECT tb_financeiros.mn_valor, tb_financeiros.dc_multa, tb_financeiros.dc_juros, tb_financeiros.dt_emissao, tb_financeiros.vc_descricao, tb_financeiros.it_status, tb_clientes.vc_razao, tb_clientes.vc_doc, tb_clientes.vc_logradouro, tb_clientes.it_numero, tb_clientes.vc_complemento, tb_clientes.vc_bairro, tb_clientes.vc_cidade, tb_clientes.vc_estado, tb_clientes.vc_cep FROM tb_financeiros INNER JOIN tb_clientes ON tb_financeiros.id_cliente = tb_clientes.id_cliente WHERE tb_financeiros.id_financeiro = " + pedido + "");
			rsPagamento.next();
			
			intStatus 			= rsPagamento.getInt("it_status");
		
			floatValor 			= rsPagamento.getFloat("mn_valor");
			floatMulta 			= rsPagamento.getFloat("dc_multa");
			floatJuros 			= rsPagamento.getFloat("dc_juros");
			dateDataEmissao		= rsPagamento.getDate("dt_emissao");

			stringRazao 		= rsPagamento.getString("vc_razao");
			stringDoc 			= rsPagamento.getString("vc_doc");
			stringLogradouro 	= rsPagamento.getString("vc_logradouro");
			intNumero 			= rsPagamento.getInt("it_numero");
			stringComplemento 	= rsPagamento.getString("vc_complemento");
			stringBairro 		= rsPagamento.getString("vc_bairro");
			stringCidade 		= rsPagamento.getString("vc_cidade");
			stringEstado 		= rsPagamento.getString("vc_estado");
			stringCep	 		= rsPagamento.getString("vc_cep");
			stringDescricao		= rsPagamento.getString("vc_descricao");

		} catch (SQLException ex) {		}
	}

}
Rafael_Steil

Nunca faca isso:

catch (SQLException ex) { }

ignorar a exception eh um erro mau, mto mau. Coloque pelo menos um ex.printStackTrace() para vc saber que o erro o correu.

Rafael

Criado 22 de dezembro de 2004
Ultima resposta 23 de dez. de 2004
Respostas 7
Participantes 5