Dúvida no preenchimento da Jlist a partir do Banco de Dados

3 respostas
C

Olá a todos, sou iniciante em Java e preciso de ajuda no preenchimento de uma Jlist com uma coluna da tabela do meu Banco de Dados (no meu caso MSAccess). Quando executo o código abaixo dá erro e a saída na Jlist está incorreta.

try{
            
            boolean consulta=true;
            final DefaultListModel lista = new DefaultListModel();
            jList1 = new javax.swing.JList(lista);
            jScrollPane2.setViewportView(jList1);
           String sqlconsulta = ("SELECT vetor INTO idPayoff ");
           con_payoff.executeSQL(sqlconsulta);

           while(con_payoff.resultSet.next()){
              lista.addElement(sqlconsulta);
            consulta=false;
           }

        }
        catch(SQLException e){
            JOptionPane.showMessageDialog(this,"Erro Cmdo SQL "+e.getMessage());
        }


}

A classe da conexão é a seguinte:

public class GerenciadorDeConexao {

    /**
     * Obt?m uma conex?o com o banco de dados
     * @return a conex?o do banco de dados
     */
    final String url = "jdbc:odbc:spe";
    final private String driver ="sun.jdbc.odbc.JdbcOdbcDriver";
    final private String user ="";
    final private String pwd = "";//Senha do Banco de dados
    static private Connection conexao;
    public Statement statement;
    static public ResultSet resultSet;
    //

    public boolean conecta(){

        boolean result = true;
        try{
            Class.forName(driver);
            conexao = DriverManager.getConnection(url,user,pwd);
            JOptionPane.showMessageDialog(null, "Conectou!!!");

        }
        catch(ClassNotFoundException Driver){
            JOptionPane.showMessageDialog(null, "Driver nao localizado:     " + Driver);
            result = false;
        }
        catch(SQLException Fonte){
            JOptionPane.showMessageDialog(null, "Erro na conexao com a fonte de dados:" + Fonte);
            result = false;
        }
        return result;
    }

    

    public void desconecta(){

        boolean result = true;
        try{
            conexao.close();
            JOptionPane.showMessageDialog(null, "Banco de Dados Fechado!!!");
        }
        catch(SQLException fecha){

            JOptionPane.showMessageDialog(null, "Nao foi possivel fechar o Bando de Dados:" + fecha);
            result = false;
        }

    }

    public void executeSQL(String sql){

        try{
            statement = conexao.createStatement();
            statement.execute(sql);
            resultSet = statement.getResultSet();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
}

No entanto está dando o seguinte erro:

java.sql.SQLException: [Microsoft][Driver ODBC Microsoft Access] A tabela idPayoff  existe.

at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)

at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)

at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)

at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)

E a saída na Jlist é o próprio código SQL -> SELECT vetor INTO idPayoff
Inúmeras vezes!!

Por favor se alguém puder me ajudar fico agradecido!

3 Respostas

C

Onde está o problema? Alguém pode me ajudar?!

W

Caro CassianoHenrique,

Nunca utilizei o banco MSAcess com java, porém um erro claro é

lista.addElement(sqlconsulta);

Você esta adicionando a sua consulta a sua lista, por este motivo a sua lista exibe varias vezes a sua consulta.
Vou explicar como funciona utilizando sql, você tem um resultset de onde você irá retirar os valores para montar o seu objeto.
mais ou menos assim

//resultset é uma classe do java que pode receber uma consulta do banco
resultset rs = stmt.executequery();
//apos voce deve percorrer o seu result para montar seu objeto
//desta forma
while(rs.next()){

      //instancia uma variavel do tipo pessoa
      Pessoa p = new Pessoa();

      //consulta no retorno do banco o campo nome e adiciona para o nome de pessoa
      //"nome" representa o atributo (coluna) da tabela do banco
      p.setnome(rs.getString("nome"));

     // voce tambem pode buscar com um int que terá a posição do atributo do banco
//     p.setnome(rs.getString(1));
     
     //após a busca feita voce adiciona no sua lista
     lista.add(p);
}

Espero ter ajudado, eu não sei como fazer as consultas no MSAcess, mas se retornar um resultSet desta forma você consegue popular seu objeto.
OBS: desculpe algum erro de codigo, pois estou sem IDE aqui para testar.

W

Caro CassianoHenrique,

Vale o clique, acho que vai te ajudar
http://www.guj.com.br/posts/list/62513.java

Criado 27 de setembro de 2010
Ultima resposta 27 de set. de 2010
Respostas 3
Participantes 2