DBUtils fails to fill fields of a Java Bean

♀尐吖头ヾ 提交于 2019-12-01 02:20:43

You can fix it in two ways:

As per dbutils doc,

  1. Alias the column names in the SQL so they match the Java names: select social_sec# as socialSecurityNumber from person
  2. Subclass BeanProcessor and override the mapColumnsToProperties() method to strip out the offending characters.

If you are keeping a class like this

public class SezioneMenuBean implements Serializable {

    private int idSezioneMenu;

    private String nome;

    private int ordine;

    public SezioneMenuBean() {
    }

    // Getters and setters for bean values

}

As per first solution write your queries something like this SELECT id_sezione_menu AS idSezioneMenu, name, ordine FROM sezione_menu.

Or

Based on second solution you can use GenerousBeanProcessor which is a subclass of BeanProcessor it ignores underscore & case sensitivity from column name. You don't have to implement your own custom BeanProcessor

GenerousBeanProcessor is available since version 1.6 of commons-dbutils.

Usage:

// TODO initialize
QueryRunner queryRunner = null;

ResultSetHandler<List<SezioneMenuBean>> resultSetHandler =
                new BeanListHandler<SezioneMenuBean>(SezioneMenuBean.class, new BasicRowProcessor(new GenerousBeanProcessor()));

// best practice is specifying only required columns in the query
// SELECT id_sezione_menu, name, ordine FROM sezione_menu
final List<SezioneMenuBean> sezioneMenuBeans = queryRunner.query("SELECT * FROM sezione_menu", resultSetHandler);

for (SezioneMenuBean sezioneMenuBean : sezioneMenuBeans) {
    System.out.println(sezioneMenuBean.getIdSezioneMenu());
}

I faced the same issue of BeanHandler/BeanHandlerList returning null or 0 for database columns.

As mentioned by @aelfric5578 in the comment, I have updated the Bean class with same names as Database, DBUtils returned values correctly.

Having BeanClass defined like this will solve your problem.


    public class SezioneMenuBean{

    int id_sezione_menu;
    String nome;
    int ordine;

    public SezioneMenuBean(){
    }

    // Getters and setters for bean values

    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!