You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java代码中QueryRunner runner为null引发空指针异常的原因是什么?

空指针异常根因

报错触发的核心逻辑是你用到的@BeforeClass、@AfterClass为JUnit单元测试框架专属注解,仅在通过JUnit执行测试用例时会被框架自动调用。直接运行main方法时JVM不会识别该类注解,也不会主动执行对应的初始化、资源回收方法,导致静态变量QueryRunner runner、Connection conn始终未赋值,保持默认null,调用runner.query时触发空指针。

修复方案

两种可选方案按需选择:

  • 方案1:改用JUnit单元测试执行逻辑
    将原有main方法替换为带@Test注解的单元测试方法,通过JUnit启动执行即可自动触发@BeforeClass的初始化逻辑:
    @Test
    public void testGetByName() throws SQLException {
        GoodsImp gd = new GoodsImp();
        List<User> list = gd.getByName("zhangsan");
        for (User user : list) {
            System.out.println(user);
        }
    }
    
  • 方案2:保留main方法,手动调用初始化逻辑
    在main方法开头手动调用bc()完成资源初始化,执行结束后手动调用ac()释放数据库连接:
    public static void main(String[] args) throws SQLException {
        // 手动执行初始化
        bc();
        GoodsImp gd = new GoodsImp();
        List<User> list = gd.getByName("zhangsan");
        for (User user : list) {
            System.out.println(user);
        }
        // 手动释放连接
        ac();
    }
    
额外注意事项

当前SQL用了like模糊查询语法,你传入的参数"zhangsan"只能精确匹配姓名完全等于zhangsan的记录,如果需要模糊匹配包含zhangsan的记录,需要传入加了通配符的参数,比如"%zhangsan%"。

内容的提问来源于stack exchange,提问作者zzl514

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:51:01