Bug no Commons DBUtils?

0 respostas
Rafael_Afonso

Olá:

Hoje tentei usar usar a biblioteca Commons DbUtils do Projeto Jakarta. Entretanto estou um tanto decepcionado. Vejam: No programa abaixo faço uso do método toBeanList() da classe BasicRowProcessor. Este método pega um ResultSet e gera uma lista preenchida com instancias de um certa Classe.
Eis o Programa:

import java.sql.*;
import java.util.List;

import org.apache.commons.dbutils.*;
import org.apache.commons.dbutils.handlers.*;

/**
 * @author rafael
 *
 */
public class TestChar {

    public static void main(String[] args) throws Exception {
           Connection conn = null;
           Statement stmt = null;
           ResultSet rs = null;
           try {
               System.out.println("starting ...");
               Class.forName("com.mysql.jdbc.Driver").newInstance();
               conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/order", "root", "");
               stmt = conn.createStatement();
               rs = stmt.executeQuery("SELECT * FROM tipo_ocorrencia");
               List list = (List) BasicRowProcessor.instance().toBeanList(rs, TipoOcorrencia.class);
               for(java.util.Iterator it = list.iterator(); it.hasNext(); ) {
                  System.out.println(((TipoOcorrencia)it.next()));
               }
           } finally {
             DbUtils.close(rs);
             DbUtils.close(stmt);
             DbUtils.close(conn);
           }
    }
}

Agora o Bean:

import java.io.Serializable;


/**
 * @author rafael
 *
 * @
 */
public class TipoOcorrencia implements Serializable {
    private int codigo;
    private String descricao;
    private char codTipoAtor;
    //Atributo Lazy

    /**
     * @return
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @return
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @return
     */
    public char getCodTipoAtor() {
        return codTipoAtor;
    }

    /**
     * @param i
     */
    public void setCodigo(int i) {
        codigo = i;
    }

    /**
     * @param string
     */
    public void setDescricao(String string) {
        descricao = string;
    }

    /**
     * @param i
     */
    public void setCodTipoAtor(char c) {
        codTipoAtor = c;
    }

    public int hashCode() {
        return this.getCodigo();
    }

    public boolean equals(Object oth) {
        if (this == oth) {
            return true;
        }

        if (oth == null) {
            return false;
        }

        if (oth.getClass() != getClass()) {
            return false;
        }

        TipoOcorrencia other = (TipoOcorrencia)oth;

        if (this.codigo != other.codigo) {
            return false;
        }

        return true;
    }

    /**
     * @return
     * @see java.lang.Object#toString()
     */
    public String toString() {
        StringBuffer sbObject = new StringBuffer(this.getClass().getName() + "[");

        sbObject.append("codigo=").append(this.getCodigo());
        sbObject.append(", descricao=").append(this.getDescricao());
        sbObject.append(", codTipoAtor=").append(this.getCodTipoAtor());

        sbObject.append("]");
        return sbObject.toString();
    }


}

E Agora o Banco de dados:

CREATE TABLE tipo_ocorrencia (
  codigo int(10) unsigned NOT NULL auto_increment,
  descricao varchar(45) NOT NULL default '',
  codTipoAtor char(1) NOT NULL default '',
  PRIMARY KEY  (codigo),
  KEY tipo_ocorrencia_dewscricao (descricao),
  KEY tipo_ocorrencia_tipoAtor_descricao (codTipoAtor,descricao)
) TYPE=MyISAM;

INSERT INTO tipo_ocorrencia (codigo, descricao, codTipoAtor) VALUES("6", "insercão", "N");
INSERT INTO tipo_ocorrencia (codigo, descricao, codTipoAtor) VALUES("7", "Listagem
do dia", "N");
INSERT INTO tipo_ocorrencia (codigo, descricao, codTipoAtor) VALUES("8", "ato 1", "I");
INSERT INTO tipo_ocorrencia (codigo, descricao, codTipoAtor) VALUES("9", "ato 2", "I");

Pois bem, quando vou executar o programa aparece a seguinte mensagem:

Ou seja, para de imprimir na primeira linha.
Se eu substituir a linha do System.out.println(), dentro do for por

System.out.println(((TipoOcorrencia)it.next()).getCodigo());

Aparece o seguinte:

Apesar de pegar as quatro linhas da tabela, não lê o código (um campo int).
Se eu substituir a linha do System.out.println(), dentro do for por

System.out.println(((TipoOcorrencia)it.next()).getDescricao());

Aparece o seguinte:

Aqui pelo menos está correto.
E finalmente, se eu substituir a linha do System.out.println(), dentro do for por

System.out.println(((TipoOcorrencia)it.next()).getCodTipoAtor());

Aparece o seguinte:

Ou seja, aparece algum problema em getCodTipoAtor(). Aparentemente há algum problema na hora de pegar atributos de tipos primitivos.

Alguém já usou esta biblioteca? Já passou por isso? Conseguiu resolver? Como?

Grato,

Criado 3 de fevereiro de 2004
Respostas 0
Participantes 1