Erro em consulta no Banco(RESOLVIDO)

9 respostas
F

Olá, estou com um problema aqui bem simples mas nao estou conseguindo resolver. Preciso fazer uma consulta no BD de acordo com o codigo de um produto, esse codigo esta em uma variavel, simplesmente nao consigo fazer a busca utilizando a variavel, toda vez q tento, me retorna uma exceção.
codigo:

int codprod=Integer.parseInt(textcodprod.getText());
rs = s.executeQuery("select * from prod where  cod='"+codprod+"'");
textnomeprod.setText(""+rs.getString("nome"));

se alguem puder me dizer onde esta o erro agradeceria muito!

9 Respostas

spycall

Esse código é uma String mesmo?

Pedrosa

Voce precisa usar rs.next para posicionar o registro:

//evite select *
String SQL = " select campo1,campo2 from prod where  cod= ?";
pstmt = conn.prepareStatement(SQL);
//prepareStatement o ? na query, vc informa o tipo e o valor o driver se vira com as aspas.
pstmt.setInt(1, codigo);
rs = pstmt.executeQuery();
if (rs.next()) {
 //aqui vc consegue obter o valor do ResulSet.
}
adriano_si

Ler a exceção ajuda nessas horas… Da próxima vez, coloque a exceção aqui… mas esse erro já estava na cara…

F

Pedrosa, esse “conn”, se refere a conexao?

estou resgatando a conexao assim:

s =Conexao1.getConnection().createStatement();
//e depois
int codprod=Integer.parseInt(textcodprod.getText());
             rs = s.executeQuery("select * from prod where  cod='"+codprod+"'");

como faria entao?

Pedrosa

Sim é a conexao e vc deve usar um PreparedStatement e sempre feche a conexao no finnaly

PreparedStatement pstmt = null;
ResultSet rs = null;
	  try {
			conn = ConnectionFactory.getConnection();
			String SQL = " select campo from tabela where campo = ?"
			pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, codigo);
			rs = pstmt.executeQuery();
			while (rs.next()) { }
      } catch (Exception e) {
		     //tratamento de erro
      } finally {
 	      ConnectionFactory.closeConnection(conn, pstmt, rs);
      }
F

blza!
consegui entender isso ai, mas ainda nao entendi esse trecho!:

pstmt.setInt(1, codigo);

o “1” e o “codigo” se referem ao que exatamente?

Obrigado pela ajuda!

A

É a posição do seu campo que será substitído e é um inteiro.

por exemplo na sua consulta tem um campo que será substituido e está na posição 1.

select * from prod where  cod=?"

Se tiver mais de um você segue a sequência

select * from prod where  cod=? and nome=?"
pstmt.setInt(1, codigo);   
pstmt.setString(2, nome);

Observe que você concatenou sua consulta e não precisar usar o pstmt.setInt(1, codigo);, procura algum tópico com injeção de SQL. Ai você vai entender melhor o uso de pstmt.setInt(1, codigo); ao invés de concatenar string para criar sua consulta.

F

humm…entendi.
entao seria

pstmt.setInt(1, cod);

ja que o campo na bd esta definido nesta forma, correto?

F

ahh…pode deixar, ja entendi aqui, o “cod” eh a variavel q vou usar.
funcionou perfeitamente, vlw ai!

Criado 14 de abril de 2009
Ultima resposta 14 de abr. de 2009
Respostas 9
Participantes 5