为什么QueryRunner运行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
只是"标记"。他们自己什么也不做;其他软件与它们交互。具体来说,junit。你没有在这里运行,所以他们什么也不做。
将初始化代码移动到main
方法。(例如,在那里调用bc()
)。