我在以下行中收到“java.lang.NullPointerException”错误:
miIdioma=miDao.find(Idioma.class, "playa");
miIdioma是de class“Idioma”的一个对象,它由atrributes“palabra”和“idioma”组成
Dao文件名为IIdiomaDao.java,我想使用它的方法:
public <T> T find(Class<T> clazz, Serializable id) {
return entityManager.find(clazz, id);
}
要获得对此方法的访问权限,我在原始文件中声明了变量miDao
private IIdiomaDao miDao;
最后,我正在使用此方法获取访问权限
miIdioma=miDao.find(Idioma.class, "playa");
我知道当一个变量未初始化时会显示此错误,但是我将数据库连接到我的项目并且应该上传数据库数据。为了执行单一测试,我遵循以下步骤:
我连接了数据库
public class IdiomaDaoTest {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/diccionario";
private static final String USER = "root";
private static final String PASSWORD = "mypassword";
}
我导入了红色数据
块引用
public void importDataSet() throws Exception {
IDataSet dataSet = readDataSet();
cleanlyInsert(dataSet);
}
private IDataSet readDataSet() throws Exception {
return new FlatXmlDataSetBuilder().build(new File("/home/inta/workspace/JPAconPruebasUnitarias/src/test/sources/FlatXmlDataSet.xml"));
}
private void cleanlyInsert(IDataSet dataSet){
IDatabaseTester databaseTester;
try {
databaseTester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD);
databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
databaseTester.setDataSet(dataSet);
databaseTester.onSetup();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
注1:在这里,我想数据库已经上传,因此对其进行了初始化。
我的问题是:为什么miDao指向Null?我做错了什么?
注2:我的数据集是:
<!DOCTYPE dataset SYSTEM "my-dataset.dtd" >
<dataset>
<idioma palabra="playa" idioma="español"/>
<idioma palabra="beach" idioma="ingles"/>
<idioma palabra="platja" idioma="catalan"/>
</dataset>
非常感谢,这个社区摇滚!
答案 0 :(得分:2)
问题就在这里。
private IIdiomaDao miDao;// you have declare the miDao
但不要初始化它。
然后你会在这里得到NullPointerException
miIdioma=miDao.find(Idioma.class, "playa"); // NullPointerException since
// miDao is null
初始化miDao
以避免NullPointerException