java.sql.SQLException: Cannot create xxx 解决办法

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值