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,