找出为什么 QueryRunner runner 可以为 null

Find why QueryRunner runner can be null

为什么我的代码中有 QueryRunner runner null

我是 java 编程的初学者。我正在尝试开发一个程序,但是当我 运行 我的程序发布在下面时,它返回了这个错误

Exception in thread "main" java.lang.NullPointerException
    at Dao.GoodsImp.getByName(GoodsImp.java:94)
    at Dao.GoodsImp.main(GoodsImp.java:119)
public class GoodsImp implements GoodsDao{
    private static Connection conn;
    private static QueryRunner runner;
    @BeforeClass
    public static void bc() throws SQLException {
        conn = myDBUtils.getConnection();
        runner = new QueryRunner();
    }
    @AfterClass
    public static void ac() throws SQLException {
        if (conn != null && !conn.isClosed())
            conn.close();
    }


    @Override
    public List<User> getByName(String name) throws SQLException {
        /*String sql = "select * from goods where name like ?";
        List<Goods> list = runner.query(conn, sql, new BeanListHandler<>(Goods.class), name);
        for (Goods goods : list) {
            System.out.println(goods);
        }
        return list;*/
        String sql = "select * from user where name like ?";
        List<User> list = runner.query(conn, sql, new BeanListHandler<>(User.class), name);
        return list;
    }


    public static void main(String[] args) throws SQLException {
        GoodsImp gd = new GoodsImp();
        List<User> list = new ArrayList<>();
        list = gd.getByName("zhangsan");
        for (User user : list) {
            System.out.println(user);
        }
    }
}

您正在混合测试系统(这就是 @BeforeClass@AfterClass 的意义所在)和实际应用程序。

本质上:@BeforeClass@AfterClass 只是 'markers'。他们自己什么都不做;其他软件与它们交互。具体来说,junit。你不在运行这里,所以他们什么都不做。

将初始化代码移至您的 main 方法。 (例如,在那里调用 bc())。