Jdbc

8 respostas
B

Ola pessoal
Estou utilizando banco de dados Acess
e fiz uma localização mais ele não consegue localizar
fala que o veiculo não existe no banco de dados, mais na verdade ele ta gravado no banco de dados…
Segue abaixo o codigo

blocalizar.addActionListener(
	new ActionListener()
	 {
		 public void actionPerformed(ActionEvent event)
		  {
			  try
			   {


				   String SQL = " SELECT *FROM tbveiculo "+
				   " Where bdveiculo = ' " +
				   tveiculo.getText()+ " ' " ;

				   ResultSet prs= MeuState.executeQuery(SQL);

			   tveiculo.setText(prs.getString("bdveiculo"));
	tanofabr.setText(prs.getString("bdanofabr"));
	tanomodelo.setText(prs.getString("bdanomodelo"));
	tcor.setText(prs.getString("bdcor"));
	tmarca.setText(prs.getString("bdmarca"));
	tmodelo.setText(prs.getString("bdmodelo"));
	trenavan.setText(prs.getString("bdrenavan"));
	tchassi.setText(prs.getString("bdchassi")); 
			   JOptionPane.showMessageDialog(null,"Veiculo encontrado");
			   }
			  catch(SQLException ex)
			   {
				   JOptionPane.showMessageDialog(null,"Veiculo não encontrado!");

			   }
		  }
	 }
	);

8 Respostas

Rafael_Steil

Ou nao… :wink:

No tratamento de erro, voce esta dando um

OptionPane.showMessageDialog(null,"Veiculo não encontrado!");

porem, mesmo que o erro seja “instrucao SQL incorreta”, voce recebera a mensagem de “Veiculo nao encontrado”. Troque o codigo por algo como

OptionPane.showMessageDialog(null,"Veiculo não encontrado! "+ e);

ou

e.printStackTrace();
OptionPane.showMessageDialog(null,"Veiculo não encontrado!");

e entao olhe no console pela mensagem de erro.

Ha um erro evidente no teu codigo. Ao executar a query, voce nao esta chamando o metodo “next()” do resultset, o que com certeza ira ocasionar em erro. Portanto, ao inves de fazer

ResultSet prs= MeuState.executeQuery(SQL);
tveiculo.setText(prs.getString("bdveiculo"));

Faca

ResultSet prs= MeuState.executeQuery(SQL);
if (rs.next()) {
    tveiculo.setText(prs.getString("bdveiculo")); 
    // coloque aqui os outros campos, como bdanomodelo e ainfs
}
else {
    // mostre uma mensagem para o usuario dizendo que 
    // nenhum registro foi encontrado
}

Alem disseo, as tuas variaveis estao fora de um padrao. Em Java, voce nao comeca nomes de variaveis com maiusculas, somente classes. Mais ainda, nomes totalmente em maiusculas sao usadas em constantes. Portanto, eh melhor chamar a tua var “SQL” de “sql”.

A nomenclatura dos campos do banco de dados tambem esta estranha. Porque prefixar todos os campos “bd”, se eles por natureza pertencem ao banco de dados? :wink:

Rafael

B

Mesmo assim~não consegue localizar no bando de dados
da a mensagem veiculo não encontrado.

Rafael_Steil

Ok, entao se nao deu erro algum, eh pq a query esta indo com algum filtro que nao existe no banco.

De um

System.out.println(sql);

pegue o sql que foi jogado na tela, e tente executar no braco. Provavelmente nao ira trazer resultado algum tambem.

Reparando melhor no teu codigo, o teu SQL esta com espacoes em branco na hora de concatenar o sql… Voce esta fazendo

String sql = "select * from tabela where campo = ' "+ variavel +" ' order bv seila";

repare que, apos o sinal de igual, voce tem uma aspa simples, entao uma dupla, e entao um sinal de adicao… o mesmo apos a concatenacao da variavel. Voce precisa tirar esse espaco em branco.

Rafael

B

Da essa mensagem , a

Veiculo não encontrado: [Microsoft][ODBC Driver Manager] estado de cursor invalido

Rafael_Steil

Vc chamou ‘next()’ no teu resultset?

Rafael

B

sim chamei

Rafael_Steil

Todos os teus campos da tabela sao do tipo String? digo, voce nao estaria dando um getString() em um campo do tipo Date? ( isso costuma ser um problema com access e afins ).

Se ainda nao resolver, meta um breakpoing e debugue.

Rafael

B

Rafael Steil

cara que burrice a minha os erros estavam nos espaços que eu deixei
entre ’ " ; etc…
Agora felizmente consegui…
Muito obrigado pela atenção…

aqui nos somos bem atendidos

Criado 3 de julho de 2004
Ultima resposta 4 de jul. de 2004
Respostas 8
Participantes 2