谁能帮我看一下,这些代码是否有错,这个是运行孙鑫《struts2深入详解》的例子时候发生的错误,首先数据库是mysql,mysql的驱动已经被放置到tomcat的lib目录下了,主要有三个java源代码,很可能有错,但是好多地方我看不懂代码的意思,所以不知道错在哪里。现在我把代码贴出如下:
1.Uer.java
package org.hhsh.struts2.action;
import java.util.Date;
import org.hhsh.struts2.persistence.dao.UserDao;
import org.hhsh.struts2.persistence.entity.User;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport
{
private static final long serialVersionUID = 3970199804617664569L;
private User user;
private UserDao userDao;
/**
* 在构造方法中初始化UserDao对象
*/
/*public RegisterAction()
{
userDao = new UserDao();
}*/
public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
/**
* 请求register!default.action,调用doDefault方法
*/
//@Override
public String doDefault() throws Exception
{
return INPUT;
}
/**
* 调用UserDao的register方法注册用户
*/
//@Override
public String execute() throws Exception
{
user.setRegDate(new Date()); //注意不要忘了设置注册日期
userDao.register(user);
return SUCCESS;
}
/**
* 为user对象提供getter方法
* @return
*/
public User getUser()
{
return user;
}
/**
* 为user对象提供setter方法
* @param user
*/
public void setUser(User user)
{
this.user = user;
}
}
2.UserDao.java
package org.hhsh.struts2.persistence.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import org.hhsh.struts2.persistence.entity.User;
public class UserDao
{
private DataSource dataSource;
/**
* 在构造方法中初始化数据源对象。
*/
public UserDao()
{
Context ctx;
try
{
ctx = new InitialContext();
dataSource=(DataSource)ctx.lookup("java:comp/env/jdbc/test");
}
catch (NamingException e)
{
e.printStackTrace();
}
}
/**
* dataSource的访问器方法。
* @return 数据源对象
*/
public DataSource getDataSource()
{
return dataSource;
}
/**
* 实现用户注册功能,将用户信息保存到数据库表reg_user中。
* @param user User对象,保存了用户提交的注册信息
* @return 注册成功后的User对象
*/
public User register(User user) throws SQLException
{
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try
{
conn=getDataSource().getConnection();
String sql="insert into reg_user(username,password,sex,email,pwd_question,pwd_answer,reg_date) values(?,?,?,?,?,?,?)";
pstmt=conn.prepareStatement(sql);
int index=0;
pstmt.setString(++index, user.getUsername());
pstmt.setString(++index, user.getPassword());
pstmt.setBoolean(++index, user.getSex());
pstmt.setString(++index,user.getEmail());
pstmt.setString(++index, user.getPwdQuestion());
pstmt.setString(++index, user.getPwdAnswer());
pstmt.setTimestamp(++index, new java.sql.Timestamp(user.getRegDate().getTime()));
pstmt.execute();
//读者需注意:在多用户的并发访问中,获取的自增长id值可能不正确。
rs=pstmt.executeQuery("select last_insert_id()");
if(rs.next())
user.setId(rs.getInt(1));
else
{
return null;
}
}
catch (SQLException e)
{
throw e;
}
finally
{
closeResultSet(rs);
closePreparedStatement(pstmt);
closeConnection(conn);
}