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!
Voce precisa usar rs.next para posicionar o registro:
//evite select *StringSQL=" 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
frenkba
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
PreparedStatementpstmt=null;ResultSetrs=null;try{
conn=ConnectionFactory.getConnection();StringSQL=" select campo from tabela where campo = ?"pstmt=conn.prepareStatement(SQL);pstmt.setInt(1,codigo);rs=pstmt.executeQuery();while(rs.next()){}
}catch(Exceptione){
//tratamentodeerro}finally{
ConnectionFactory.closeConnection(conn,pstmt,rs);}
F
frenkba
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
Alberes
É 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.
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
frenkba
humm…entendi.
entao seria
pstmt.setInt(1, cod);
ja que o campo na bd esta definido nesta forma, correto?
F
frenkba
ahh…pode deixar, ja entendi aqui, o “cod” eh a variavel q vou usar.
funcionou perfeitamente, vlw ai!