Validação de formulario Java e MySQL

6 respostas
C

Pessoal, eu estou com um pequeno probleminha: Eu estou criando uma aplicação web que usa mysql estou inicio da aplicação ainda e me deparei com um probleminha. O mesmo cadastro está sendo inserido no banco várias vezes. Eu estou tentanto adicionar no programa a capacidade de examinar se os dados(nome, identidade e cpf) vindos do formulario ja existem; se o banco ja estiver com os valores iguais ele não insere os dados no banco e manda uma mensagem dizendo que o banco ja possui cadastro do cliente especificado. O banco que eu estou usando é o MySQL.

6 Respostas

R

cara, faz um select no banco procurando por um atributo unico na tupla (nao sei como voce modelou o banco, mas acredito que cpf seja atributo unico) verifica o ResultSet se ele tiver mais de 0 resultados, esse cadastro jah existe no banco.

C

É o que eu estou tentando fazer mas estou tendo problemas por não saber como usar ResultSet. Tem como você me dar uma ajuda? Eu estou fazendo o select na coluna nome, identidade e cpf. Os três elementos que devem se únicos no cadastro do cliente. Se eu conseguir recuperar os valores das colunas especificadas eu consigo desenrolar o resto. Como eu faço pra recuperar os valores de modo que eu possa comparar com as strings vidas do formulário htm?

Valeu Pela força.

R

Coloque o trecho do seu código, não tem problema que está faltando o que vc ainda não sabe, coloque aqui o que já conseguiu para que possamos te ajudar. :wink:

C

O código é esse:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import tools.ChangeToMysqlType;
import dataBase.WizardSQL;


@SuppressWarnings("serial")

public class CadastroCli extends HttpServlet {  //Esta Classe irá alimentar a Tabela Clientes do Banco de Dados Pousada;


	protected void service(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException{
		
		String[] arrayValores = new String[16];
		
		arrayValores[0] = ChangeToMysqlType.getChar(request.getParameter("nome"));
        //ChangeToMysqlType configura os valores para o formato aceito pelo Mysql (insere as aspas simples neste caso);
		arrayValores[1] = request.getParameter("datNasc");
		arrayValores[2] = ChangeToMysqlType.getChar(request.getParameter("ident"));
		arrayValores[3] = ChangeToMysqlType.getChar(request.getParameter("cpf"));
		
		arrayValores[4] = ChangeToMysqlType.getChar(request.getParameter("end"));
		arrayValores[5] = ChangeToMysqlType.getChar(request.getParameter("compl"));
		arrayValores[6] = ChangeToMysqlType.getChar(request.getParameter("bairro"));
		arrayValores[7] = ChangeToMysqlType.getChar(request.getParameter("cid"));
		arrayValores[8] = ChangeToMysqlType.getChar(request.getParameter("est"));
		arrayValores[9] = ChangeToMysqlType.getChar(request.getParameter("pais"));
		
		arrayValores[10] = ChangeToMysqlType.getChar(request.getParameter("empresa"));
		arrayValores[11] = ChangeToMysqlType.getChar(request.getParameter("cargo"));
		arrayValores[12] = ChangeToMysqlType.getChar(request.getParameter("telCom"));
		
		arrayValores[13] = ChangeToMysqlType.getChar(request.getParameter("telRes"));
		arrayValores[14] = ChangeToMysqlType.getChar(request.getParameter("telCel"));
		arrayValores[15] = ChangeToMysqlType.getChar(request.getParameter("email"));
		
		PrintWriter writer = response.getWriter();
		
		String scriptSQL = WizardSQL.insert("Clientes", arrayValores); // Script SQL usado pra inserir os dados no Banco;
		
		try
		{
			Connection con = dataBase.ConnectionFactory.getConnection("Pousada", "usuario", "senha"); //Conexão criada
			Statement sql = con.createStatement(); //Statement criado;
			
			ResultSet rs = sql.executeQuery("SELECT nome,ident,cpf FROM Clientes WHERE nome="+arrayValores[0]); //Essa consulta sql será usada pra validar o formulário. Os valores recuperados das colunas nome, ident e cpf serão comparados com os valores vindos do formulário (arrayValoeres[0], arrayValoeres[2], arrayValoeres[0],) html.

			// Esse bloco irá conferir se o Cliente cadastrado ja existe
            // Um for será inserido aqui para rodar por todos os valores vindos do banco de dados;
			if(arrayValores[0] == "Claudio Costa"){
				writer.println("Você tentou cadastrar um Cliente ja cadastrado no sistema, clique aqui caso você queira alterar os dados do cadastro");
				
			}else{
				writer.println("O cadastro foi concluido com sucesso!");
				sql.executeUpdate(scriptSQL); // Esta insere os dados no banco;
			}
	
			sql.close(); //Fecha Statement;
			con.close(); //Fecha a conexão no Banco
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}		
	}
}
R

Ok! Eu mudei um trechino do seu código, veja abaixo:

Connection con = dataBase.ConnectionFactory.getConnection("Pousada", "usuario", "senha"); //Conexão criada
	Statement sql = con.createStatement(); //Statement criado;

	String nome = "", ident = "", cpf = ""; // essas variáveis criei temporariamente, elas deverão conter o que o usuário quer inserir no BD

	// procuro se esses dados  existem na sua tabela
	ResultSet rs = sql.executeQuery("SELECT nome, ident, cpf "+
			                        "  FROM Clientes "+
			                        " WHERE nome = '" + nome + "' "+
			                        "   and ident = '" + ident + "' "+
			                        "   and cpf = '" + cpf + "'");
			
	if (rs.isBeforeFirst() || rs.isAfterLast()){ // não encontrou nada, vc deve inserir
		// faca aqui sua rotina de inserçao dos dados
	}else{ // encontrou o registro
		// o registro  existe, faça aqui o que quiser para esse caso
		writer.println("Você tentou cadastrar um Cliente ja cadastrado no sistema, clique aqui caso você queira alterar os dados do cadastro");
	}
C

Valeu. Deu certo muito obrigado pela ajuda.

Criado 31 de março de 2008
Ultima resposta 1 de abr. de 2008
Respostas 6
Participantes 3