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;
}
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;
}
解决方案 »
- javascript小问题
- jnative调用dll动态函数 怎样接收函数返回值 函数没有传入值
- Rhino怎么解析网页上的javascript
- 垂直搜索引擎项目寻求合作!!!
- spring security 方法注解 strut2 Struts has detected an unhandled exception
- 一个很小的问题
- 需求些介绍structs基本知识的中文文章看看
- 在J2EE能否与COM、CORBAR结合?
- 环境变量的名字有规定吗?
- 奇怪,jbx默认打包生成war文件时,lib下的jdbc驱动没打包进去,其他的可以
- java.lang.Exception: No tests found matching Method main
- jsp中2个控件之间的取值问题,急!
<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>
配置文件如图
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)这是错。
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的些许区别