找出为什么 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()
)。
为什么我的代码中有 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()
)。