Problemas com result set

3 respostas
marceloamigo

Bom dia pessoal!!

Estou com problemas nesse método

private void preencherCampos(int codigo) {
    try {
        Conexao conexao = new Conexao();
        String sql = "Select * from Produtos where Codigo = " + codigo;
        ResultSet rs = conexao.obterRs(sql);
       txtDescricao.setText(rs.getString("Descricao"));
        txtDescricaoReduzida.setText(rs.getString("Descricao_Reduzida"));
        txtCodigoBarras.setText(rs.getString("Codigo_Barras"));
        txtValidade.setText(rs.getString("Validade"));
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
acredito que não seja a conexão,  que o método abaixo esta ok

private void preencherTabela() {

try {

Conexao conexao = new Conexao();

ResultSet rs = conexao.obterRs(Select * from Produtos where Descricao like '” + txtLocalizar.getText() + % limit 0,20);

tblProdutos.setModel(new TabModDepartamentos(rs));

conexao.fecharConexao();

} catch (SQLException e) {

e.printStackTrace();

}

}
erro gerado

java.sql.SQLException

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)

at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)

at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528)

at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)

at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)

alguma dica??

3 Respostas

Pedrosa

Apos executar seu rs precisa colocar essa linha:

if (rs.next()) {
    txtDescricao.setText(rs.getString("Descricao"));
    txtDescricaoReduzida.setText(rs.getString("Descricao_Reduzida"));
    txtCodigoBarras.setText(rs.getString("Codigo_Barras"));
    txtValidade.setText(rs.getString("Validade")); 
}
marceloamigo

funcionou!!

obrigado

Pedrosa

Agora vc pode melhor esse código, isole o acesso ao banco em uma classe do tipo DAO, retorne um objeto que representa os campos que voce deseja preencher no SWING, sempre use PreparedStatement e por padrão feche a conexão com o banco:

DAO

public class XptoDAO {
    public SeuObjeto getSeuObjetoDAO(int codigo) {
        PreparedStatement pstmt = null;
        Connection conn = null;
        SeuObjeto objeto = null;
        Conexao conexao = new Conexao();
        try {
           conn = conexao.getConnection();
           String sql = "Select * from Produtos where Codigo = ?;
           pstmt = conn.prepareStatement(sql);
	       pstmt.setInt(1, codigo);
           ResultSet rs = pstmt.executeQuery();
           if (rs.next()) {
              objeto = new SeuObjeto();
              objeto.setDescricao(rs.getString("colunaBD"));      
              ...
           }

        } catch (Exception e) {
	        e.printStackTrace();
        } finally {
 	        conexao.closeConnection(conn, pstmt, rs);
        } 
        return  objeto;   
    }
}

E o seu preencheCampo ficaria bem mais limpo:

private void preencherCampos(int codigo) {
    SeuObjeto seuObjeto  = new XptoDAO().getSeuObjetoDAO(codigo)
    txtDescricao.setText(seuObjeto.getDescricao);
    ...
}
Criado 17 de fevereiro de 2009
Ultima resposta 17 de fev. de 2009
Respostas 3
Participantes 2