public JdbcTemplate jdbcTemplate;
public static Logger logger = Logger.getLogger(UserDaoImpl.class);
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

/**
 * 用户登录
 */
@Override
public UsersLogin userValidate(String username) {
logger.info("login");
System.out.println(username);
String sql = "select userName,userpassword from crm_users_login where userName = ?";
final UsersLogin user = new UsersLogin();
final Object[] pa = new Object[] {username};
jdbcTemplate.query(sql, pa, new RowCallbackHandler(){  这句话不执行、直接跳过。崩溃。。
public void processRow(ResultSet rs) throws SQLException {
user.setUsername(rs.getString("userName"));
user.setUserpassword(rs.getString("userpassword"));
}
});
System.out.println(user.getUserpassword()+"___");
return user;
}

解决方案 »

  1.   

    然后打印出System.out.println(user.getUserpassword()+"___");也肯定是空了。哎。
      

  2.   

    <?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: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.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 配置spring jdbc template -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass">
        <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="jdbcUrl">
        <value>jdbc:oracle:thin:@localhost:1521:orcl</value>
    </property>
    <property name="user">
        <value>system</value>
    </property>
      <property name="password">
    <value>root</value>
    </property>
    <property name="maxPoolSize">
    <value>200</value>
    </property>
    <property name="maxIdleTime">
    <value>600</value>
    </property>
    <property name="acquireIncrement">
    <value>5</value>
    </property>
      </bean>
     
       <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
          <ref bean="dataSource"/>
        </property>
      </bean>
     
    <!-- Dao -->
    <bean id="usersDao" class="com.bgctv.crm.dao.impl.UserDaoImpl">
    <property name="jdbcTemplate">
    <ref bean="jdbcTemplate"/>
    </property>
    </bean>

    <!-- Action -->
    <bean id="UserAction" class="com.bgctv.crm.action.UserAction" scope="prototype">
    <property name="usersDao">
    <ref bean="usersDao"/>
    </property>
    </bean>
    <!--
    <bean id="usersLogin" class="com.bgctv.crm.domain.UsersLogin">
    <property name="dao">
    <ref bean="usersDao"/>
    </property>
    </bean>
    -->
    </beans>  
    配置文件如图
      

  3.   

    description The server encountered an internal error () that prevented it from fulfilling this request.exception java.lang.NullPointerException
    com.bgctv.crm.action.UserAction.Login(UserAction.java:38)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)这是错。
      

  4.   

    不要崩溃,兄台这个情形简单来说,症结在于你要在query jdbcTemplate.query方法定义一个
    List<UsersLogin> users = new ArrayList<UserLogin>(); 
    而不是只定义一个UsersLogin对象,尽管你的query只返回一个user。
    而在那个process方法中需要做的是UsersLogin user = new UsersLogin();
    user.setUsername(rs.getString("userName")); //如果数据库列名大小写匹配
    user.setUserpassword(rs.getString("userpassword"));
    users.add(user);
    再进一步讲:1. 如果一定要在query jdbcTemplate.query方法里面做些操作,则必须应该在jdbcTemplate.query方法外面定义要返回的List对象,然后在process方法中将每行的数据加入此List对象。2. 如果不一定要在jdbcTemplate.query方法里面操作数据而只是想返回数据,则应该使用RowMapper,如果使用RowCallbackHandler方法,必须要在jdbcTemplate.query方法外部定义好要返回的List对象,--记住必须得是个List对象而且在query方法外部定义。如果没有,则返回不到任何东西。但是RowMapper的好处是它本身就自动生成一个List对象通过query方法返回。网上这里有篇文章资料可以供兄台参考,兄台可以看到RowMapper和RowCallbackHandler,还有ResultSetExtractor的些许区别