DBUtils无法填充Java Bean的字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了DBUtils无法填充Java Bean的字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2481字,纯文字阅读大概需要4分钟。
内容图文
![DBUtils无法填充Java Bean的字段](/upload/InfoBanner/zyjiaocheng/699/00aa3b3cdc964ae991c309686c29ad0d.jpg)
我有一个像这样的mysql表:
CREATE TABLE `sezione_menu` (
`id_sezione_menu` int(11) unsigned NOT NULL AUTO_INCREMENT,
`nome` varchar(256) NOT NULL DEFAULT '',
`ordine` int(11) DEFAULT NULL,
PRIMARY KEY (`id_sezione_menu`)
)ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
我使用apache dbutils来查询我的数据库,使用以下方法:
public static List<SezioneMenu> getSezioniMenu() {
String sql = "SELECT * FROM sezione_menu";
try {
QueryRunner qr = new QueryRunner(createDataSource());
ResultSetHandler rsh = new BeanListHandler(SezioneMenu.class);
List<SezioneMenu> sezioni = (List<SezioneMenu>)qr.query(sql, rsh);
return sezioni;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
private static DataSource createDataSource() {
BasicDataSource d = new BasicDataSource();
d.setDriverClassName(DRIVER);
d.setUsername(USERNAME);
d.setPassword(PASSWORD);
d.setUrl(DB_URL);
return d;
}
现在,如果我运行我的应用程序,它不会抛出异常,但我的java bean SezioneMenu的某些字段(不是全部!)都是空的(整数字段等于零,字符串字段等于空字符串).
其他表和bean也会发生这种情况.
我过去在另一个系统配置中使用过这种方法没有问题.
解决方法:
您可以通过两种方式修复它:
- Alias the column names in the SQL so they match the Java names: select social_sec# as socialSecurityNumber from person
- Subclass BeanProcessor and override the mapColumnsToProperties() method to strip out the offending characters.
如果你要保持这样的课程
public class SezioneMenuBean implements Serializable {
private int idSezioneMenu;
private String nome;
private int ordine;
public SezioneMenuBean() {
}
// Getters and setters for bean values
}
根据第一个解决方案,写下您的查询,例如SELECT id_sezione_menu AS idSezioneMenu,name,ordine FROM sezione_menu.
要么
基于第二种解决方案,您可以使用GenerousBeanProcessor,它是BeanProcessor的子类,它忽略了下划线和放大器.列名称的区分大小写.您不必实现自己的自定义BeanProcessor
从commons-dbutils的1.6版本开始,GenerousBeanProcessor就可用了.
用法:
// 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());
}
内容总结
以上是互联网集市为您收集整理的DBUtils无法填充Java Bean的字段全部内容,希望文章能够帮你解决DBUtils无法填充Java Bean的字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。