java.sql.SQLException: Cannot create xxx 解决方案前言:纪念第一个博客:一直想写博客,不知道写什么,最近在学习Java框架,只是抓住机会,胡说八道,代码
//使用DbUtils里的QueryRunner操作数据库 private QueryRunner queryRunner = new QueryRunner(); /** * 返回一个查询javaBean的sql语句 * * @param type 返回的对象类型 * @param sql 执行的sql语句 * @param args sql相应的参数值 * @param <T> 泛型的返回类型 * @return */ public <T> T queryForOne(Class<T> type, String sql, Object... args) { Connection con = JdbcUtils.getConnection(); try { return queryRunner.query(con, sql, new BeanHandler<T>(type), args); } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.close(con); } return null; } String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` from t_book where id = ?"; System.out.println(queryForOne(Book.class, sql, id)); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 对应的JavaBean类 public class Book { private Integer id; private String name; private String author; private BigDecimal price; private Integer sales; private Integer stock; private String imgPath; } 1 2 3 4 5 6 7 8 9
代码很简单,通过传入JavaBean类,sql句子和句子中的参数,sql语句查询结果封装成对应的JavaBean对象,return该对象。
遇到的问题如下:无法创建相应的对象
最初的疑问出在于sql在句子中,即数据库中的属性名和JavaBean数据库的最后一个属性是私有变量名不一致img_path”,JavaBean类中的变量名是imgPath,真的不一样,一个按照python命名规范命名,一个按照规范命名Java命名规范命名,于是修改sql语句如下
String sql = "select `id` , `name` , `author` , `price` , `sales` , `stock` , `img_path` imgPath from t_book where id = ?"; 1 查询时,将最后一个属性更改为一个别名,并将其更改为相应JavaBean类中的变量名。结果还是一样。
终于找到了答案,JavaBean类中没有写无参结构,因为创建Bean使用对象的过程newInstance()方法,该方法只能调用无参结构,类别中没有写无参结构,当然也不能创建对象。当初写JavaBean写变量,右键getter,setter,constructor,就完事了。现在我知道问题了。加上无参结构,代码没有bug,楼下的叔叔看了都说好,又能愉快地学习了。 ———————————————— 原文链接:https://blog.csdn.net/weixin_43476106/article/details/114028736