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.
Validação de formulario Java e MySQL
6 Respostas
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.
É 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.
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. 
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();
}
}
}
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 já 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 já 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");
}
Valeu. Deu certo muito obrigado pela ajuda.