springJDBC报错NullPointException 解决问题记录

直接说明解决办法:

最终检查发现是datasource虽然存在,但是spring没有找到。在applicationContext.xml中添加


在测试类开头加上

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:/applicationContext.xml")
public class testUserService {

。。。。

}

就能跑通!

详细内容:

问题出在testUserService.java

java.lang.NullPointerException
    at com.spring.dao.impl.UserDaoJdbcImpl.findUserByName(UserDaoJdbcImpl.java:42)
    at test.java.com.service.testUserService.demo5(testUserService.java:128)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

@Test//根据名字查
    public void demo5(){
        String username = "杨问宇";

        User user= userService.findUserByName(username);
        System.out.println(user);
        assertEquals(user.getName(),username);

    }

在出现空指针的上下用

System.out.println()

找user前和user后是否有值。

发现前面有值后面为null

然后在

User user= dao.findUserByName(username);

设置断点,进入debug模式,发现

springJDBC报错NullPointException 解决问题记录_第1张图片

dao和user都是有数据的,那么问题就在findUserByName方法上了。Ctrl+鼠标左键进入该方法

进入UserService.java

public User findUserByName(String name){
        return userDaoJdbc.findUserByName(name);
    }

Ctrl+鼠标左键进入findUserByName方法

进入UserDaoJdbcImpl.java

发现是JdbcTemplate是null,再往下找发现datasource是不存在

但是我的applicationContext.xml配置了datasource没有问题

但是一定缩小范围定位了datasource不存在就好办多了。

百度后得知,我的xml文件里少了


另外需要在测试类的开头加上

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:/applicationContext.xml")

我@RunWith没加上

这两个都加上后,成功跑通。

就这个一个形式上的小错误,消耗了我两个晚上的时间,着实郁闷。不过已经解决了,可以继续学习喽~

你可能感兴趣的:(spring,JdbcTemplate,空指针,空指针,JdbcTemplate,spring,解决办法)