Problema com SELECT [RESOLVIDO]

11 respostas
edipokbelo
Eu estava fazendo uma tela de cadastro, quando me deparei na parte em que tenho que cadastrar pessoas, porém não posso cadastrar pessoas com cpf igual. então tentei atraves desse código e não obtive sucesso.
public void selecionarTeste() {
		try {
			String url = "jdbc:odbc:Pizzaria";
			String usuario = "";	
			String senha = "";
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

			Connection con;
			con = DriverManager.getConnection(url,usuario,senha);
			Statement st = con.createStatement();
			ResultSet r = st.executeQuery("SELECT cd_Cpf FROM Cliente");
			while ( r.next()){
				String id = r.getString("cd_Cpf");
				String cpf = "[telefone removido]";
				if(id.equals(cpf)){
					System.out.println("funciona");
				}
				else{
					System.out.println(" nao funciona");
				}
				
		
			}
			st.close();
			con.close();
			
		}
	catch (Exception e) {
		JOptionPane.showMessageDialog(null,"Erro: "+e.getMessage());

	}

}

Não sei se o problema é na minha lógica ou se existe um comando mais fácil para isso.

11 Respostas

renamed

Essa restrição não vem do Banco de Dados? Pode ser um índice Unique ou ainda Chave Primária…

thundercas

Edipokbelo,

Existe sim uma maneira mais fácil:

ResultSet r = st.executeQuery("SELECT cd_Cpf FROM Cliente WHERE cd_Cpf = '[telefone removido]'");  
   if (r.next()){
         System.out.println("CPF já Existe");
   } else {
         System.out.println("CPF Válido");  
   }

Espero ter ajudado

abs

L

edipokbelo, você está checando de está obtendo todos os valores de corretamente com
String id = r.getString(“cd_Cpf”);”

Acho que as duassoluções propostas estão corretas, mas acho que a melhor maneira de fazer isso é usando uma “primary key” no banco de dados. Já que você quer evitar duplicidade no seu banco de dados.

danilopelegrino

thundercas:
Edipokbelo,

Existe sim uma maneira mais fácil:

ResultSet r = st.executeQuery("SELECT cd_Cpf FROM Cliente WHERE cd_Cpf = '[telefone removido]'");  
   if (r.next()){
         System.out.println("CPF já Existe");
   } else {
         System.out.println("CPF Válido");  
   }

Espero ter ajudado

abs

Fio, esta resposta do nosso amigo é bem mais facil alem de mais “rapida” em materia de performance rsrsr

Imagina se vc tiver 1000000000000000000000 cpf cadastrados.

Voce vai ficar comparando um por um até encontrar algum igual ou nao??

Não faz sentindo entende?

Faça como descrito acima. Um select onde busca o cpf informado, se encontrar existe, caso contrario nao existe.

Bem mais rapido e facil nao acha? rsrs

Abraço

jeancz

danilopelegrino:
thundercas:
Edipokbelo,

Existe sim uma maneira mais fácil:

ResultSet r = st.executeQuery("SELECT cd_Cpf FROM Cliente WHERE cd_Cpf = '[telefone removido]'");  
   if (r.next()){
         System.out.println("CPF já Existe");
   } else {
         System.out.println("CPF Válido");  
   }

Espero ter ajudado

abs

Fio, esta resposta do nosso amigo é bem mais facil alem de mais “rapida” em materia de performance rsrsr

Imagina se vc tiver 1000000000000000000000 cpf cadastrados.

Voce vai ficar comparando um por um até encontrar algum igual ou nao??

Não faz sentindo entende?

Faça como descrito acima. Um select onde busca o cpf informado, se encontrar existe, caso contrario nao existe.

Bem mais rapido e facil nao acha? rsrs

Abraço

E um índice para este campo na base de dados irá melhorar ainda mais.

pmlm

Se o campo é chave primária (e faz sentido que seja) então o índice é automaticamente criado.

jeancz

Bem lembrado

danilopelegrino

jeancz:
danilopelegrino:
thundercas:
Edipokbelo,

Existe sim uma maneira mais fácil:

ResultSet r = st.executeQuery("SELECT cd_Cpf FROM Cliente WHERE cd_Cpf = '[telefone removido]'");  
   if (r.next()){
         System.out.println("CPF já Existe");
   } else {
         System.out.println("CPF Válido");  
   }

Espero ter ajudado

abs

Fio, esta resposta do nosso amigo é bem mais facil alem de mais “rapida” em materia de performance rsrsr

Imagina se vc tiver 1000000000000000000000 cpf cadastrados.

Voce vai ficar comparando um por um até encontrar algum igual ou nao??

Não faz sentindo entende?

Faça como descrito acima. Um select onde busca o cpf informado, se encontrar existe, caso contrario nao existe.

Bem mais rapido e facil nao acha? rsrs

Abraço

E um índice para este campo na base de dados irá melhorar ainda mais.

Falo e disse meu camagada hehehe abraço

LPJava

acho que ter um primary-key sendo o cpf, ia facilitar no desenvolvimento. Outro detalhe nao use Statement no seu codigo java.
Pesquise por Injection SQL e vai descobrir o pq.

abracos,

edipokbelo

Na verdade eu uso o PreparedStatement, só peguei esse código para dar um exemplo.
Eu queria saber se ele retorna algum valor igual o JOptionPane, quando você clica em OK ele retorna 1, em cancelar 0 (acho que é assim não me lembro muito bem)
porque eu acho que nem tudo no BD pode ser PK, por exemplo se eu for fazer uma tabela para guardar o nome das pizzas, o nome seria PK?! :shock:

agora fiquei confuso, não manjo muito de BD

ctdaa

Olá. Sobre a tabela de “Pizzas”… bem, o nome da pizza pode até ser a chave primária… mas seria mais interessante ter um campo do tipo id único gerado pelo banco. Como se fosse um código do produto no cardápio :slight_smile:
Poderia ser algo assim:

create table produto
(
	id BIGINT not null primary key,
	nome VARCHAR(25) not null,
	descricao VARCHAR(255) not null,
	imageurl VARCHAR(55),
	preco DECIMAL(9.2)
)

O produto poderia também estar associado a uma tabela de categorias, tipo: pizzas, sobremesas, bebidas… etc:
Ficaria assim:

create table produto
(
	id BIGINT not null primary key,
	categoria_id BIGINT not null,
	nome VARCHAR(25) not null,
	descricao VARCHAR(255) not null,
	imageurl VARCHAR(55),
	preco DECIMAL(9.2)
) 

create table categoria
(
	id BIGINT not null primary key,
	nome VARCHAR(25) not null,
)

(Se quiser deixar mais simples o nome da categoria pode ser definido direto na tabela de produtos.)

Criado 6 de novembro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 11
Participantes 9