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
相关产品推荐
相关产品推荐

