新手,各位前辈指导下。
进行查询操作时,对象:age,类型:int.if(age!=0)
{
count++;
paramsMap.put(count,new Object[]{"and t.age like ? ","%"+age+"%"});
}---------------------------------------------------------
int age=Integer.parseInt(request.getParameter("age"));List<TUserVo> resultList=null;
if(request.getParameterMap().size()==0)
{
resultList=us.findAll();
}
else
{
Date birthday=JdbcUtil.string2Date(request.getParameter("birthday"));
resultList=us.find(userName, userNo, birthday,sex,age,address);
抛出异常,获取到NULL,该怎样修改?

解决方案 »

  1.   

    先在sql/plus或其它客户端工具中运行下sql是否能查出结果,这个异常是说数据类型有问题吧,应该是你的int 类型参数,你看看数据库中是什么类型,还有方法中是否是int类型
      

  2.   

    数据库表格设置age 是 number。方法用的是int 没错。
    public List<TUserVo> find(String userName,String userNo,Date birthday,String sex,int age,String address) throws SQLException{}
      

  3.   

    错误肯定是出在这里
    int age=Integer.parseInt(request.getParameter("age"));request.getParameter("age")取到的是一个空值,你看下赋值的地方是不是写错了
      

  4.   

    ---------------------------------------------------------
    int age=Integer.parseInt(request.getParameter("age"));
    这句话错了
    改成
    String ageStr=request.getParameter("age")
    int age=0
    if(null!=ageStr && ""!=ageStr)
    {
        age=Integer.parseInt(ageStr);
    }
      

  5.   


    package ibmetp.jdbc.user.services;import ibmetp.jdbc.util.JdbcUtil;
    import ibmetp.jdbc.vo.TUserVo;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class UserService
    {
    private Connection conn;

    /**
     * 取得Connection对象
     * @return
     */
    public Connection getConnection()
    {
    try
    {
    // if(conn!=null && !conn.isClosed())
    // {
    // return conn;
    // }
    Class.forName("oracle.jdbc.driver.OracleDriver");
    conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "pinotao","orcl");
    }
    catch (Exception e)
    {
    e.printStackTrace();
    return null;
    }
    return conn;
    }

    /**
     * 查询全部
     * @return
     * @throws SQLException
     */
    public List<TUserVo> findAll() throws SQLException
    {
    conn=getConnection();
    Statement ps= conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
    ResultSet rs= ps.executeQuery("select * from TUSER order by update_date desc");
    List<TUserVo> resultList=new ArrayList<TUserVo>();
    while(rs!=null && rs.next())
    {
    TUserVo user=new TUserVo();
    user.setUserId(rs.getLong("USER_ID"));
    user.setUserName(rs.getString("USER_NAME"));
    user.setUserNo(rs.getString("USER_NO"));
    user.setSex(rs.getString("SEX"));
    user.setAddress(rs.getString("ADDRESS"));
    user.setBirthday(rs.getDate("BIRTHDAY"));
    user.setAge(rs.getInt("AGE"));
    String[] interest=JdbcUtil.string2Array(rs.getString("INTEREST"));
    // if(rs.getString("INTEREST")!=null)
    // {
    // interest=rs.getString("INTEREST").split(",");
    // }
    user.setInterest(interest);
    resultList.add(user);
    }
    ps.close();
    conn.close();
    return resultList; }

    /**
     * 处理查询的方法
     * @param userName 查询条件用户的名称
     * @param userNo 查询条件用户编号
     * @param birthday 查询条件的生日
     * 思考:在此方法中的参数来作为查询条件,如果扩展其它查询条件用什么方式会更好?
     * @return 存在则返回查询结果否则返回空list
     */
    public List<TUserVo> find(String userName,String userNo,Date birthday,String sex,int age,String address) throws SQLException
    {
    /*
     * 注:where 1=1是一种查询技巧
     */
    String querySQL="select * from TUSER t where 1=1 ";

    conn=getConnection();
    Map<Integer,Object[]> paramsMap=new HashMap<Integer, Object[]>();
    Integer count=0;
    if(userName!=null && userName.trim().length()>0)
    {
    count++;
    paramsMap.put(count, new Object[]{" and t.USER_NAME like ? ","%"+userName+"%"});
    }
    if(userNo!=null && userNo.trim().length()>0)
    {
    count++;
    paramsMap.put(count, new Object[]{" and t.USER_NO like ? ","%"+userNo+"%"});
    }

    if(birthday!=null)
    {
    count++;
    paramsMap.put(count, new Object[]{" and t.birthday = ? ",new java.sql.Date(birthday.getTime())});
    }
    if(sex!=null)
    {
    count++;
    paramsMap.put(count,new Object[]{"and t.sex like ? ","%"+sex+"%"});
    }
    if(age!=0)
    {
    count++;
    paramsMap.put(count,new Object[]{"and t.age like ? ","%"+age+"%"});
    }
    if(address!=null)
    {
    count++;
    paramsMap.put(count,new Object[]{"and t.address like ? ","%"+address+"%"});
    }
    // if(interest!=null)
    // {
    // count++;
    // paramsMap.put(count,new Object[]{"and t.interest like ? ","%"+interest+"%"});
    // }
    /*
     * 动态取得查询条件
     */
    PreparedStatement ps= getPreparedStatement(querySQL,paramsMap);
    ResultSet rs= ps.executeQuery();
    List<TUserVo> resultList=new ArrayList<TUserVo>();
    while(rs!=null && rs.next())
    {
    TUserVo user=new TUserVo();
    user.setUserId(rs.getLong("USER_ID"));
    user.setUserName(rs.getString("USER_NAME"));
    user.setUserNo(rs.getString("USER_NO"));
    user.setSex(rs.getString("SEX"));
    user.setAddress(rs.getString("ADDRESS"));
    user.setBirthday(rs.getDate("BIRTHDAY"));
    user.setAge(rs.getInt("AGE"));
    String[] interest=JdbcUtil.string2Array(rs.getString("INTEREST"));
    user.setInterest(interest);
    resultList.add(user);
    }
    ps.close();
    conn.close();
    return resultList;
    }

    /**
     * 根据查询件动态生成PreparedStatement对象
     * @param querySQL 查询sql
     * @param paramsMap 保存的动态查询条件map
     * @return
     * @throws SQLException
     */
    private PreparedStatement getPreparedStatement(String querySQL,Map<Integer,Object[]>paramsMap) throws SQLException
    {
    String conditionString="";

    Set<Integer> keys=paramsMap.keySet();
    for (Integer key : keys)
    {
    Object[] condition=paramsMap.get(key);
    if(condition!=null)
    {
    conditionString+=condition[0];
    }
    }
    querySQL+=conditionString+" order by update_date desc";
    conn=getConnection();
    PreparedStatement ps= conn.prepareStatement(querySQL);
    for (Integer key : keys)
    {
    Object[] condition=paramsMap.get(key);
    if(condition!=null)
    {
    ps.setObject(key, condition[1]);
    }
    }
    return ps;
    }
    /**
     * 删除用户(可批量删除)
     * @param userIds
     */
    public int delete(String[] userIds) throws SQLException
    {
    String delSQL="delete TUSER where USER_ID in ("+JdbcUtil.array2String(userIds)+")";

    if(userIds==null)
    {
    return 0;
    }
    conn=getConnection();
    Statement ps= conn.createStatement();
    String ids=JdbcUtil.array2String(userIds);
    int i= ps.executeUpdate(delSQL);
    ps.close();
    conn.close();
    return i;
    }

    /**
     * 更新用户
     * @param userVo 用户vo对象
     * @return 成功更新返回大于0的数据
     * @throws SQLException 
     */
    public int update(TUserVo userVo) throws SQLException
    {
    String sql="update tuser set USER_NAME=?,USER_NO=?,AGE=?,BIRTHDAY=?,ADDRESS=?,SEX=?,INTEREST=?,update_date=sysdate" +
    " where user_id=?";
    conn=getConnection();
    PreparedStatement ps= conn.prepareStatement(sql);
    ps.setString(1, userVo.getUserName());
    ps.setString(2, userVo.getUserNo());
    ps.setInt(3, userVo.getAge());
    ps.setDate(4, new java.sql.Date(userVo.getBirthday().getTime()));
    ps.setString(5, userVo.getAddress());
    ps.setString(6, userVo.getSex());
    String interest=JdbcUtil.array2String(userVo.getInterest());
    ps.setString(7, interest);
    ps.setLong(8, userVo.getUserId());
    return ps.executeUpdate();
    }


    /**
     * 按ID查找
     * @param id
     * @return
     * @throws SQLException
     */
    public TUserVo findById(Long id) throws SQLException
    {
    String sql="select * from TUSER t where t.USER_ID=?";
    conn=getConnection();
    PreparedStatement ps= conn.prepareStatement(sql);
    ps.setLong(1, id);
    ResultSet rs=ps.executeQuery();
    TUserVo user=new TUserVo();
    while(rs!=null && rs.next())
    {
    user.setUserId(rs.getLong("USER_ID"));
    user.setUserName(rs.getString("USER_NAME"));
    user.setUserNo(rs.getString("USER_NO"));
    user.setSex(rs.getString("SEX"));
    user.setAddress(rs.getString("ADDRESS"));
    user.setBirthday(rs.getDate("BIRTHDAY"));
    user.setAge(rs.getInt("AGE"));
    String[] interest=JdbcUtil.string2Array(rs.getString("INTEREST"));
    user.setInterest(interest);
    }
    ps.close();
    conn.close();
    return user;
    }

    /**
     * 新增USER
     * @param userVo
     * @return
     * @throws SQLException
     */
    public int add(TUserVo userVo) throws SQLException
    {
    String addSQL="insert into TUSER (USER_ID,USER_NAME,USER_NO,AGE,BIRTHDAY,ADDRESS,SEX,INTEREST)" +
    " values(SEQ_USER.NEXTVAL,?,?,?,?,?,?,?)";

    conn=getConnection();
    PreparedStatement ps= conn.prepareStatement(addSQL);
    ps.setString(1, userVo.getUserName());
    ps.setString(2, userVo.getUserNo());
    ps.setInt(3, userVo.getAge());
    ps.setDate(4, new java.sql.Date(userVo.getBirthday().getTime()));
    ps.setString(5, userVo.getAddress());
    ps.setString(6, userVo.getSex());
    String interest=JdbcUtil.array2String(userVo.getInterest());
    ps.setString(7, interest);
    return ps.executeUpdate();
    }
    }
      

  6.   

    package ibmetp.jdbc.user.controller;import ibmetp.jdbc.user.services.UserService;
    import ibmetp.jdbc.util.JdbcUtil;
    import ibmetp.jdbc.vo.TUserVo;import java.io.IOException;
    import java.sql.SQLException;
    import java.util.Date;
    import java.util.List;import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;/**
     * Servlet implementation class UserListServlet
     */
    public class UserListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        private UserService us=new UserService();;
        /**
         * @see HttpServlet#HttpServlet()
         */
        public UserListServlet() {
            super();
            // TODO Auto-generated constructor stub
        } /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException 
    {

    } /**
     * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
     */
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    try
    {
    String userName=request.getParameter("userName");
    String userNo=request.getParameter("userNo");
    String sex=request.getParameter("sex");
    String address=request.getParameter("address");
    int age=Integer.parseInt(request.getParameter("age"));
    // String interest=request.getParameter("interest");
    List<TUserVo> resultList=null;
    if(request.getParameterMap().size()==0)
    {
    resultList=us.findAll();
    }
    else
    {
    Date birthday=JdbcUtil.string2Date(request.getParameter("birthday"));
    resultList=us.find(userName, userNo, birthday,sex,age,address);
    /*
     * 传递到userList.jsp,在userList.jsp中用request.getAttribute("list")可以取到
     * resultList变量
     */
    }
    request.setAttribute("list", resultList);
    }


    catch (SQLException e)
    {
    e.printStackTrace();
    }
    response.setContentType("text/html; charset=utf-8");
    response.setCharacterEncoding("utf-8");
    request.getSession().getServletContext().getRequestDispatcher("/pages/userList.jsp").forward(request, response);
    }}