急急!!!最近在学习spring+JDBC整合的一个实例出现了一个java.lang.nullPointException的异常,但是我觉得我创建对象并初始化他的

xx档案 发布于 2014/01/22 10:38
阅读 2K+
收藏 1

本人非常的感激!!!

我使用的是mysql数据库!

/**测试类**/

public class PersonServiceTest {

private static PersonService personService;



@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
ApplicationContext cxt= new ClassPathXmlApplicationContext("beans.xml");
PersonService personService=(PersonService)cxt.getBean("personService");
} catch (Exception e) {
e.printStackTrace();

}


@Test
public void save() {

try {
personService.save(new Person("我是谁"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**接口PersonService**/

public interface PersonService {
/**
* 保存person
* @param person
*/
public void save(Person person);
/**
* 跟新person
*/


public void update(Person person);
/**
* 获取person
*/
public Person getPerson(Integer personid);
/**
* 获取所有person
*/
public List<Person> getPersons();
/**
* 删除指定id的person
* @param personid
*/
public void delete(Integer personid);
}
/**业务Bean**/

public class PersonServiceBean implements PersonService {
// private DataSource dataSource;
private JdbcTemplate jdbcTemlate;



public void setDataSource(DataSource dataSource) {
this.jdbcTemlate = new JdbcTemplate();
}


@Override
public void save(Person person) {
jdbcTemlate.update("insert into person(name) value(?)",new Object[]{person.getName()},
new int[]{java.sql.Types.VARCHAR});


}


@Override
public void update(Person person) {
jdbcTemlate.update("update person(set name=? where id=?",new Object[]{person.getName(), person.getId()},
            new int[]{java.sql.Types.VARCHAR,java.sql.Types.INTEGER});


}


@Override
public Person getPerson(Integer personid) {

return (Person) jdbcTemlate.queryForObject("select * from person where id=?", new Object[]{personid},
new int[]{java.sql.Types.INTEGER}, new PersonRowMapper());
}


@Override
public List<Person> getPersons() {
return (List<Person>) jdbcTemlate.query("select * from person ",new PersonRowMapper());
}


@Override
public void delete(Integer personid) {
jdbcTemlate.update("delete person where id=?",new Object[]{ personid},
          new int[]{java.sql.Types.INTEGER});
}
}

/**bean**/

public class Person {
private Integer id;
private String name;

public Person(){}
public Person(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

/**配置文件**/

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="org.git.mm.mysql.Driver"/>
   <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8"/>
   <property name="username" value="root"/>
   <property name="password" value="123456"/>
  
   <property name="initialSize" value="1"/>
  
   <property name="maxActive" value="500"/>
   
   <property name="maxIdle" value="2"/>
  
   <property name="minIdle" value="1"/>
</bean>      
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
 <property name="dataSource" ref="dataSource"/> 
 </bean> 
<tx:annotation-driven transaction-manager="txManager"/>
 <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
   <property name="dataSource" ref="dataSource"></property>
  </bean>
  
                
</beans>

/**后台情况**/

java.lang.NullPointerException
at junit.test.PersonServiceTest.save(PersonServiceTest.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)

加载中
0
Ryan-瑞恩
Ryan-瑞恩

报NullPointException 的原因太多了,,,你不上一些具体信息没有办法断定。尽可能的详细描述+代码+配置文件信息。

个人建议。

xx档案
xx档案
现在出现了新的错误,传递参数错误?java.lang.IllegalArgumentException: No DataSource specified at cn.itcast.service.impl.PersonServiceBean.save(PersonServiceBean.java:25)
Ryan-瑞恩
Ryan-瑞恩
回复 @xx档案 : 也就是说,执行数据操作的时候,没有注入进去东西!!!
Ryan-瑞恩
Ryan-瑞恩
回复 @xx档案 : <property name="dataSource" ref="dataSource"></property>你注入的是这个属性,而你的PersonServiceBean把dataSource注释了。JDBCTemplate为空!!!
xx档案
xx档案
我上传了,再帮我看看
0
Yashin
Yashin
空指针错误,哪个对象声明了没有实例化造成的。这种问题应该贴出代码和出错信息,看看是哪行报的,大家才能帮到你。
xx档案
xx档案
我上传了,再帮我看看!
0
文心雕码
文心雕码
具体报错信息?
xx档案
xx档案
我上传了,再帮我看看!!
0
huan
huan

PersonService personService=(PersonService)cxt.getBean("personService"); 

多写了一个PersonService

xx档案
xx档案
现在出现了新的错误,传递参数错误?java.lang.IllegalArgumentException: No DataSource specified at cn.itcast.service.impl.PersonServiceBean.save(PersonServiceBean.java:25)
0
金贞花
金贞花

 

问问你itcast的老师

Tanweijie
Tanweijie
真相。
金贞花
金贞花
回复 @xx档案 : +_+
xx档案
xx档案
不好意思,我是在网上下载的!
0
Tanweijie
Tanweijie
Spring容器没有启动么?
xx档案
xx档案
回复 @Mr_Tank_ : 现在出现了这个异常,java.lang.IllegalArgumentException: No DataSource specified at cn.itcast.service.impl.PersonServiceBean.save(PersonServiceBean.java:25)
Tanweijie
Tanweijie
回复 @xx档案 : 好像配置文件没有配置扫描注解?
xx档案
xx档案
启动的
返回顶部
顶部